目录

leetcode844.比较含退格的字符串

leetcode844.比较含退格的字符串

题目:

给定 st 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 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
  • st 只含有小写字母以及字符 '#'

代码:

class Solution {
    public boolean backspaceCompare(String s, String t) {
        Stack<Character> stack1 = new Stack<>();
        Stack<Character> stack2 = new Stack<>();
        char c1[] = s.toCharArray();
        char c2[] = t.toCharArray();
        for (int i = 0; i < c1.length; i++) {
            if (c1[i] == '#' && !stack1.isEmpty()) {
                stack1.pop();
            } else if(c1[i]!='#'){
                stack1.push(c1[i]);
            }
        }

        for (int i = 0; i < c2.length; i++) {
            if (c2[i] == '#' && !stack2.isEmpty()) {
                stack2.pop();
            } else if(c2[i]!='#'){
                stack2.push(c2[i]);
            }
        }

        String res1 = "";
        String res2 = "";

        int s1 = stack1.size();
        int s2 = stack2.size();

        for (int i = 0; i < s1; i++) {
            res1 += stack1.pop();
        }
        for (int i = 0; i < s2; i++) {
            res2 += stack2.pop();
        }
        System.out.println(res1);
        System.out.println(res2);
        return res1.equals(res2);
    }
}

解释:

通过设置俩个栈来进行解决,对于碰到#号且栈不为空时,将上一个元素弹出,还有需要注意输入的是字符串,我们把它放置到字符数组内,方便后续操作。

注意:

在最后俩个for循环时,如果将size直接写入判断语句,随着元素的弹出,size会发生改变,因此需要在外面定义好。