【LeeCode】844.比较含退格的字符串

给定 st 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true# 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

解:同时从后向前遍历S和T(i初始为s末尾,j初始为t末尾),记录#的数量,模拟消除的操作,如果#用完了,就开始比较S[i]和S[j]。

  • 时间复杂度:O(n + m)

  • 空间复杂度:O(1)

class Solution {
    public boolean backspaceCompare(String s, String t) {
        int sSkipNum = 0; // 记录S的#数量
        int tSkipNum = 0; // 记录T的#数量
        int i = s.length() - 1;
        int j = t.length() - 1;
        while (true) {
            while (i >= 0) { // 从后向前,消除S的#
                if (s.charAt(i) == '#') sSkipNum++;
                else {
                    if (sSkipNum > 0) sSkipNum--;
                    else break;
                }
                i--;
            }
            while (j >= 0) { // 从后向前,消除T的#
                if (t.charAt(j) == '#') tSkipNum++;
                else {
                    if (tSkipNum > 0) tSkipNum--;
                    else break;
                }
                j--;
            }
            // 后半部分#消除完了,接下来比较S[i] != T[j]
            if (i < 0 || j < 0) break; // S 或者T 遍历到头了
            if (s.charAt(i) != t.charAt(j)) return false;
            i--;j--;
        }
        // 说明S和T同时遍历完毕
        if (i == -1 && j == -1) return true;
        return false;
    }
}

你可能感兴趣的:(#,LeeCode,算法,leetcode,数据结构)