记录力扣刷题新手村-打卡题
力扣题-844
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
本题的思路是字符重组:一般使用数据结构中栈(先进后出)
首先将所有的字符压栈push()
a、判断字符中是否有后退字符#(注意字符是否为空的情况)
b、然后依次弹栈pop()
c、最后比较栈中的元素是否相同
方法一:双栈法(时间复杂度O(n))
class Solution {
public boolean backspaceCompare(String S, String T) {
Stack<Character> st1 = new Stack<>();
Stack<Character> st2 = new Stack<>();
for(Character item:S.toCharArray()){
if(item != '#' )
st1.push(item);
else{
if(st1.isEmpty())
continue;
else
st1.pop();
}
}
for(Character item:T.toCharArray()){
if(item != '#' )
st2.push(item);
else{
if(st2.isEmpty())
continue;
else
st2.pop();
}
}
if(st1.size() != st2.size())
return false;
while(!st1.isEmpty()){
if(st1.pop() != st2.pop())
return false;
}
return true;
}
}
方法二:双指针法
class Solution {
public boolean backspaceCompare(String S, String T) {
int i = S.length() - 1, j = T.length() - 1;
int skipS = 0, skipT = 0;
while (i >= 0 || j >= 0) {
while (i >= 0) {
if (S.charAt(i) == '#') {
skipS++;
i--;
} else if (skipS > 0) {
skipS--;
i--;
} else {
break;
}
}
while (j >= 0) {
if (T.charAt(j) == '#') {
skipT++;
j--;
} else if (skipT > 0) {
skipT--;
j--;
} else {
break;
}
}
if (i >= 0 && j >= 0) {
if (S.charAt(i) != T.charAt(j)) {
return false;
}
} else {
if (i >= 0 || j >= 0) {
return false;
}
}
i--;
j--;
}
return true;
}
}