题目描述
知识点
栈
结果
实现
码前思考
- 这种涉及到括号匹配的字符串题目,一看就是要用栈。
代码实现
//这种涉及到括号匹配的字符串题目,一看就是要用栈。
class Solution {
public:
string decodeString(string s) {
//使用string来模拟栈
string ans;
for(auto c : s){
if(c!=']'){
ans.push_back(c);
}else{
string cur;
//需要不断弹出
while(ans.back() != '['){
cur.push_back(ans.back());
ans.pop_back();
}
ans.pop_back();
//然后得到数字,注意数字的大小
string numStr;
while(!ans.empty() && isdigit(ans.back())){
numStr.push_back(ans.back());
ans.pop_back();
}
reverse(numStr.begin(),numStr.end());
int k = stoi(numStr);
reverse(cur.begin(),cur.end());
//重复k次放进去
for(int i=0;i<k;i++){
ans+=cur;
}
}
}
return ans;
}
};
码后反思
- 这里复习了好多C++字符串的操作,比如
reverse()
,isdigit()
,stoi()
。好久没用,都快忘了; string
和vector
可以使用back()
来取最后一个元素;- 对于C++所有容器,取元素之前一定要判空!!!(脑袋里面一定要过这一点!)比如上面的
back()
,在使用时一定要注意。