844. 比较含退格的字符串

题目:
给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。

示例 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 = "#a#c"
输出:true
解释:S 和 T 都会变成 “c”。

示例 4:
输入:S = "a#c", T = "b"
输出:false
解释:S 会变成 “c”,但 T 仍然是 “b”。

提示:
1 <= S.length <= 200
1 <= T.length <= 200
S 和 T 只含有小写字母以及字符 '#'。

思路一:
每次遇到"#"都需要退格,就是重栈顶移除元素。
申明两个Stack,用于存放T和S遍历后的字符集。
比较两个Stack。

代码如下:

public boolean backspaceCompare(String S, String T) {
        Stack<Character> stackS = new Stack<Character>();
        Stack<Character> stackT = new Stack<Character>();
        int len = S.length() > T.length() ? S.length() : T.length();//取S和T较长的,一次便利
        for (int i = 0; i < len; i++) {
            if (i < S.length()) {
                char s = S.charAt(i);
                if ('#' == s) {
                    if (!stackS.isEmpty())//stack为空会报StackIsEmptyException
                        stackS.pop();
                } else {
                    stackS.push(s);
                }
            }
            if (i < T.length()) {
                char t = T.charAt(i);
                if ('#' == t) {
                    if (!stackT.isEmpty())
                        stackT.pop();
                } else {
                    stackT.push(t);
                }
            }
        }
        return stackS.equals(stackT);
    }

思路二:
把Stack换成StringBuffer,其他和思路一相同。

-------------------------------小白学算法

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容