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 };