比较含退格的字符串

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/backspace-string-compare

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

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

点击查看代码
class Solution {
    public boolean backspaceCompare(String s, String t) {
        //定义指向 s ,t 的尾指针
        int i = s.length() - 1, j = t.length() - 1;
        //定义 s ,t 中的 # 数量
        int skipS = 0, skipT = 0;
        //迭代,当 s 和 t 都遍历结束退出
        while (i >= 0 || j >= 0) {
            //遍历 s
            while (i >= 0) {
                //判断当前索引处值是不是 '#'
                if (s.charAt(i) == '#') {
                    //是则 # 数量加一,指针指向的索引向前移动
                    skipS++;
                    i--;
                } 
                //不是 '#' 且当前 '#' 数量不为 0
                else if (skipS > 0) {
                    //将当前 '#' 数量减一
                    skipS--;
                    //索引向前移动
                    i--;
                } 
                //当前不为 '#' 且数量为 0 直接返回
                else {
                    break;
                }
            }
            //遍历 t
            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)) {
                    //不相等直接返回 false
                    return false;
                }
            } 
            //超出了界限
            else {
                //判断是否
                if (i >= 0 || j >= 0) {
                    return false;
                }
            }
            //指针都向前移动
            i--;
            j--;
        }
        //返回结果
        return 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 只含有小写字母以及字符 '#'

posted @ 2022-07-21 20:33  xy7112  阅读(46)  评论(0编辑  收藏  举报