移除无效的括号
class Solution {
public:
string minRemoveToMakeValid(string s) {
/*使用栈实现*/
stack<int >stk;
int len = s.length();
for(int i = 0; i < len; ++i){
if(s[i]=='('){
stk.push(i);
}
else if(s[i]==')'){
if(!stk.empty()){
stk.pop();
}
else{
s[i] = '*';
}
}
}
int temp;
while(!stk.empty()){
temp = stk.top();
stk.pop();
s[temp] = '*';
}
/*移除字符串中的特定符号*/
s.erase(remove(s.begin(), s.end(), '*'), s.end());
return s;
}
};
第K个语法符号
class Solution {
public:
int kthGrammar(int N, int K) {
return helper(N, K, 0);
}
/*使用递归实现*/
int helper(int N, int K, int flag){
if(N == 1) return flag;
int half = (1 << (N-2));
if(K <= half){
return helper(N-1, K, flag);
}
else{
/*此处的反转是重点,要理解前后两部分的反转*/
return helper(N-1, K-half, 1-flag);
}
}
};