题解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-30 22:31
吉首大学 Web前端
工字钢写代码:改成吉林就OK了
点赞 评论 收藏
分享
头像
02-15 16:23
中南大学 Java
野猪不是猪🐗:签了美团真是不一样! 亲戚们都知道我签了美团,过年都围着我问送一单多少钱,还让弟弟妹妹们引以为戒,笑我爸我妈养了个🐢孩子,说从小就知道我这个人以后肯定没出息,我被骂的都快上天了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务