题解46 | 栈栈!栈栈!我是串串!#字符串解码#

字符串解码

https://www.nowcoder.com/practice/4e008fd863bb4681b54fb438bb859b92

#include <stack>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    string ans = "";
    stack<int> nums;
    stack<string> strs;
    int num = 0;
    
    string decodeString(string s) {
        // write code here
        for(int i = 0; i < s.size(); i++){
            if(s[i] >= '0' && s[i] <= '9'){
                num = s[i] - '0';
            }
            else if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) {
                ans += s[i];
            }
            else if (s[i] == '[') {
                nums.push(num);
                num = 0;
                strs.push(ans);
                ans = "";
            }
            else {
                int copy = nums.top();
                nums.pop();
                for(int j = 0; j < copy; j++){
                    strs.top() += ans;
                }
                ans = strs.top();
                strs.pop();
            }
        }
        return ans;
    }
};

算法基本思路:

1. 遍历字符串s,对于每个字符s[i],根据不同情况进行处理:

- 如果s[i]是数字,将其转换为对应的整数,并更新num的值;

- 如果s[i]是字母,将其添加到ans字符串中;

- 如果s[i]是左括号'[',将当前的num和ans分别压入nums和strs栈中,并将num和ans重置为空字符串;

- 如果s[i]是右括号']',从nums和strs栈中取出对应的数字和字符串,将ans重复copy次并添加到取出的字符串后面,更新ans的值。

2. 最终返回ans作为结果。

时间复杂度

O(n),其中n是字符串s的长度。

空间复杂度

O(n),主要是由于使用了nums和strs两个栈保存中间结果。

2024考研数据结构 文章被收录于专栏

本人考研刷算法题,立此专栏练习强化。

全部评论

相关推荐

2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务