LeetCode-Java题解 844. Backspace String Compare

题目地址:844. Backspace String Compare
解题思路:这道题按常理来说有两种解法。
1.用栈来实现
2.用双指针法来实现。
此处我仅记录一下我用双指针法的解题过程。首先,肯定是不能创建额外空间的,因为只有O(1)的空间复杂度。当检索到#的时候,即代表着退格,就删除一个元素,那么对这个删除的元素,我们根本不需要care,因为他已经被删除了,我们需要关心的是“留下来”的字符。又因为删除的方向是从右向左,所以指针的起点可以落在字符串的最右边,skipTskipS负责记录#的个数,当#的个数为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;
    }
}
posted @ 2022-03-03 19:13  古宇  阅读(79)  评论(1编辑  收藏  举报

欢迎来刀