1190. 反转每对括号间的子串
分类:
栈 中等
题目:
收获:
- auto在for中的应用
- reverse()方法对于迭代器类型的数据反转
复杂度:
代码:
不断进行出栈翻转入栈操作的方式,如果遇到左括号就将当前字符串入栈,并对于其内部就重新记录。
如果遇到右括号就将字符串反转并且和栈顶字符串相结合,如果为普通元素就加在临时字符串后面。
class Solution {
public:
string reverseParentheses(string s) {
stack<string> S;
string tmp="";
for(auto &ch:s){
if(ch=='('){
S.push(tmp);
tmp="";
}else if(ch==')'){
reverse(tmp.begin(),tmp.end());
tmp=S.top()+tmp;
S.pop();
}else{
tmp+=ch;
}
}
return tmp;
}
};
首先记录左右括号的位置,随后设置如果碰到括号中的一个就改变方向来读取,非常巧妙
class Solution {
public:
string reverseParentheses(string s) {
stack<int> S;
int n = s.length();
vector<int> record(n);
for(int i=0;i<n;i++){
if(s[i]=='('){
S.push(i);
}else if(s[i]==')'){
int j=S.top();
S.pop();
record[i]=j;record[j]=i;
}
}
string result="";
int index=0;
int dir=1;
while(index<n){
if(s[index]=='(' || s[index]==')'){
index=record[index];
dir=-dir;
}else{
result+=s[index];
}
index+=dir;
}
return result;
}
};
看不懂的同学可以看一下下面这个链接的动图,非常形象。
创作不易,点个赞就是对作者最大的鼓励。
搜索公众号:菜鸟阿力
每天都会在公众号分享学习积累,欢迎关注~