kylin来刷题啦-Day06:844. 比较含退格的字符串

129 阅读1分钟

这是我参与更文挑战的第12天,活动详情查看: 更文挑战

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 只含有小写字母以及字符 '#'。

友情链接

leetcode-cn.com/problems/ba…

思路解析

看完题目最初想到的就是用两个栈,分别存储两个字符串的字符。依次遍历字符串的字符时,非 “#” 字符就入栈,遇到 “#” 时,栈不为空时,就从顶部弹掉一个字符。

初始化栈数据之后,先判断两个栈大小是否相同。这是最直观的,如果大小都不相同,那么两个最终结果肯定是返回的 false 。

同时从两个栈的顶部弹出元素,如果两元素相同,继续弹出比较,一旦遇到不相同的,直接返回 false 。所有元素比较完毕后,就以为所有元素对应相同。也即程序返回 true 。

算法实现

class Solution {
    public boolean backspaceCompare(String s, String t) {
        LinkedList<Character> stack1=getTheStack(s);
        LinkedList<Character> stack2=getTheStack(t);
        if(stack1.size()!=stack2.size()){
            return false;
        }else{
            while(!stack1.isEmpty()){
                if(stack1.pop()!=stack2.pop()){
                    return false;
                }
            }
            return true;
        }
    }

    private LinkedList<Character> getTheStack(String str){
        LinkedList<Character> stack=new LinkedList<>();
        for(int i=0;i<str.length();i++){
            char ch=str.charAt(i);
            if('#'==ch){
                if(!stack.isEmpty()){
                    stack.pop();
                }
            }else{
                stack.push(ch);
            }
        }
        return stack;
    }
}

运行结果

image.png