LeetCode-Java题解 844. Backspace String Compare
题目地址:844. Backspace String Compare
解题思路:这道题按常理来说有两种解法。
1.用栈来实现
2.用双指针法来实现。
此处我仅记录一下我用双指针法
的解题过程。首先,肯定是不能创建额外空间的,因为只有O(1)
的空间复杂度。当检索到#
的时候,即代表着退格,就删除一个元素,那么对这个删除的元素,我们根本不需要care,因为他已经被删除了,我们需要关心的是“留下来”的字符。又因为删除的方向是从右向左,所以指针的起点可以落在字符串的最右边,skipT
和skipS
负责记录#
的个数,当#
的个数为0的时候,需要对当前字符进行比较,所以跳出小循环,等待另一个字符串的遍历结果;当另一个字符串也跳出循环后,两个字符串当前指向的字符就是需要比较的字符串,如果不相等,则游戏结束返回false
。如果相等则根据当前指针的位置进行判断,假如两个字符串的指针都在最左边则比较完毕,两字符串相等,否则则继续比较,直至大循环结束。
class Solution {
public boolean backspaceCompare(String s, String t) {
int skipS=0,skipT=0;
int i=s.length()-1,j=t.length()-1;
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;
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步