使用双指针法分别对两个字符串进行遍历操作
- 定义skip来记录#,以此来进行抵消
- 定义两个指针,从后往前开始遍历
- 在遍历时两指针会出现三种情况
1.第一次遇到# --->记录#
2.skip的个数不为0 -->进行抵消
3.第一次遇到非#-->跳出循环开始比较
- 最后进行两字符串之间字符的比较
class Solution {
public boolean backspaceCompare(String s, String t) {
int skipS =0;//记录s字符串中的#号数量
int skipT =0;//记录t字符串中的#号数量
//两指针从后往前遍历字符串
int i =s.length()-1;//指向s-->遍历字符串s
int j =t.length()-1;//指向t-->遍历字符串t
while(i>=0||j>=0){//两个字符串都遍历完才结束,跳出循环证明是相等的字符串
//对字符串s进行处理
//1.第一次遇到# --->记录#
//2.skip的个数不为0 -->进行抵消
//3.第一次遇到非#-->跳出循环开始比较
while(i>=0){
if(s.charAt(i)=='#') {
skipS++;
i--;
}else if(skipS>0) {
skipS--;
i--;
}else {
break;
}
}
//同样对j也做同样的处理
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)||(j>=0&&i<0)){
//证明有一个字符串已经越界
return false;
}
}
//继续遍历字符串
i--;
j--;
}
return true;
}
}