力扣算法之844. 比较含退格的字符串
BP算法(用java stack找到String s和t的实际值,再用java stack 作对比)
class Solution {
public static boolean backspaceCompare(String s, String t) {
int len1 = s.length();
// error 不可取
// int len2 = t.length();
// if(len1!=t.length())return false;
// 获取s的实际值
Stack<Character> ss = new Stack();
ss = getRealValueOfString(s);
// for(int i=0; i<s.length();++i){
// if(s.charAt(i)!='#'){
// ss.push(s.charAt(i));
// }else{
// if(ss.empty()){
// ss.push('#'); // 先装填,再移出
// ss.pop();
// }else{
// ss.pop();
// }
// }
// }
// 获取t的实际值
Stack<Character> tt = new Stack();
tt = getRealValueOfString(t);
// for(int i=0; i<t.length();++i){
// if(t.charAt(i)!='#'){
// tt.push(t.charAt(i));
// }else{
// if(tt.empty()){
// tt.push('#'); // 先装填,再移出
// tt.pop();
// }else{
// tt.pop();
// }
// }
// }
return equalStack(ss,tt);
}
public static Stack<Character> getRealValueOfString(String s){
Stack<Character> ss = new Stack();
for(int i=0; i<s.length();++i){
if(s.charAt(i)!='#'){
ss.push(s.charAt(i));
}else{
if(ss.empty()){
ss.push('#'); // 先装填,再移出
ss.pop();
}else{
ss.pop();
}
}
}
return ss;
}
public static boolean equalStack(Stack<Character>s, Stack<Character>t){
if(s.size()!=t.size())return false;
while(!s.empty()&&!t.empty()){
if(s.peek()==t.peek()){
s.pop();
t.pop();
}else{
return false;
}
}
return true;
}
}