844.比较含退格的字符串——学习笔记

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

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

示例 1

输入:s = "ab#c", t = "ad#c"
输出:true
解释:s 和 t 都会变成 "ac"。

示例 2

输入:s = "ab##", t = "c#d#"
输出:true
解释:s 和 t 都会变成 ""。

示例 3

输入:s = "a#c", t = "b"
输出:false
解释:s 会变成 "c",但 t 仍然是 "b"。

提示

  • 1 <= s.length, t.length <= 200
  • s 和 t 只含有小写字母以及字符 '#'

题目来源:力扣(LeetCode)链接

题解

class Solution {
    public boolean backspaceCompare(String s, String t) {
        //定义两个指针指向字符串的最后一个元素
        int sIndex = s.length() - 1;
        int tIndex = t.length() - 1;
        int sSkip = 0; //用来存放s字符串中的‘#’的个数
        int tSkip = 0; //用来存放t字符串中的‘#’的个数
        while (sIndex >= 0 || tIndex >=0) {
            //从字符串的最后往前遍历,直到找到一个有效字符
            while (sIndex >= 0) {
                //如果找到‘#’,就把‘#’号存起来继续往前遍历
                if (s.charAt(sIndex) == '#') {
                    sSkip++;
                    sIndex--;
                    //找到一个字符后判断其要不要退格(和‘#’抵消)
                } else if (sSkip > 0) {
                    sSkip--;
                    sIndex--;
                } else {
                    //说明此时的字符是有效字符,跳出while循环
                    break;
                }
            }
            //和上面的工作一样,找到t中的有效字符
            while (tIndex >= 0) {
                if (t.charAt(tIndex) == '#') {
                    tSkip++;
                    tIndex--;
                } else if (tSkip > 0) {
                    tSkip--;
                    tIndex--;
                } else {
                    break;
                }
            }
            //找到有效字符后,判断sIndex和tIndex是否都大于0
            if (sIndex >= 0 && tIndex >= 0) {
                //如果都大于0,判断两者的有效字符是否相等,如果不等直接返回false
                if (s.charAt(sIndex) != t.charAt(tIndex)) {
                    return false;
                }
            } else {
                //如果sIndex和tIndex只有一个小于0,说明s和t不相等,直接返回false
                if (sIndex >= 0 || tIndex >= 0) {
                    return false;
                }
            }
            //比较完本次的有效字符,索引后移,继续查找下一个有效字符
            sIndex--;
            tIndex--;
        }
        //如果上面的操作没有返回任何值,说明s和t的内容相等,返回true
        return true;
    }
}
posted @ 2023-03-20 21:17  会飞的笨笨  阅读(35)  评论(0)    收藏  举报