题目
思路
其实思路没有多难的,想记录的是,自己太不留心了。本来是想把if语句的判断写到一起,结果。。。
起初写的是 if(!sta.empty()&&str[i]==’#’)
但这样有个问题呀,如果栈sta空了(!sta.empty()为假),那么倘若当前的str[i]是’#’,由于“短路”,此if语句直接就为假了,就去执行else字句,把’#'压入栈了。。
代码
错误代码
class Solution {
public:
stack<char> moveToStack(string& str){
stack<char> sta;
int size = str.size();
for(int i=0;i<size;i++){
if(!sta.empty()&&str[i]=='#') sta.pop();
else sta.push(str[i]);
}
return sta;
}
bool backspaceCompare(string s, string t) {
stack<char> sta1 = moveToStack(s);
stack<char> sta2 = moveToStack(t);
while(!sta1.empty()&&!sta2.empty()){
char tmp1 = sta1.top(); sta1.pop();
char tmp2 = sta2.top(); sta2.pop();
if(tmp1!=tmp2) return false;
}
return sta1.empty()&&sta2.empty();
}
};
AC代码
class Solution {
public:
stack<char> moveToStack(string& str){
stack<char> sta;
int size = str.size();
for(int i=0;i<size;i++){
if(str[i]=='#'){
if(!sta.empty()) sta.pop();
}
else sta.push(str[i]);
}
return sta;
}
bool backspaceCompare(string s, string t) {
stack<char> sta1 = moveToStack(s);
stack<char> sta2 = moveToStack(t);
while(!sta1.empty()&&!sta2.empty()){
char tmp1 = sta1.top(); sta1.pop();
char tmp2 = sta2.top(); sta2.pop();
if(tmp1!=tmp2) return false;
}
return sta1.empty()&&sta2.empty();
}
};