加油 ( •̀ ω •́ )y!

394. 字符串解码

 

 题目大意:给定一个由小写字母、数字和中括号构成的字符串,将该字符串按给定解码规则展开后的结果返回。

解码规则:将数字num之后的中括号中的内容重复num次后拼接再一起。不明白可以看样例输出结果。

 

解决思路:利用搜索模拟,从下标0开始,遇到字母就直接记录,遇到数字时记录下数字,直到遇到'[' 则进入搜索获得'[]'内的字符串展开结果,遇到']'则结束当前这一次搜索的结果,并且记录下当前']'坐标,获取结果后将结果重复刚刚记录的数字的次数,并且将当前走到下标赋值给当前正在循环的下标,保证一个位置只会遍历一次

 

 1 class Solution {
 2 public:
 3     int iSize;
 4     string dfs(int &pos, string &s)
 5     {
 6         if(pos >= iSize)return "";
 7         string tmp;
 8         int num = 0;
 9         for(int i = pos; i < iSize; ++i)
10         {
11             if(s[i] >= 'a' && s[i] <= 'z') tmp.push_back(s[i]);
12             else if(s[i] >= '0' && s[i] <= '9')
13             {
14                 num = num*10 + (s[i]-'0');
15             }
16             else if(s[i] == '[')
17             {
18                 int index = i + 1;
19                 string sx = dfs(index, s);
20                 for(int j = 0; j < num; ++j)
21                     tmp += sx;
22                 num = 0;
23                 i = index;
24             }
25             else if(s[i] == ']')
26             {
27                 pos = i;
28                 break;
29             }
30         }
31         return tmp;
32     }
33     string decodeString(string s) {
34         iSize = s.size();
35         int pos = 0;
36         string ans = dfs(pos, s);
37         return ans;
38     }
39 };
View Code

 

posted @ 2022-07-04 15:07  皮皮虎  阅读(87)  评论(0)    收藏  举报