leetcode【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”。

解题思路:就是栈。

官方艺术代码:

public boolean backspaceCompare(String S, String T) {
        return build(S).equals(build(T));
    }
    public static String build(String s){
        Stack<Character> stack = new Stack<>();
        for (char c: s.toCharArray()){
            if(c != '#')
                stack.push(c);
            else if(!stack.isEmpty())
                stack.pop();
        }
        return String.valueOf(stack);
    }

自己的代码:

class Solution {
    public boolean backspaceCompare(String S, String T) {
        Stack<Character> stack1 = new Stack<>();
        Stack<Character> stack2 = new Stack<>();
        for(char c:S.toCharArray()){
            while(!stack1.isEmpty()){
            if(c == '#')
                stack1.pop();
            else stack1.push(c);
            }
        }
        for(char c:T.toCharArray()){
            while(!stack2.isEmpty()){
            if(c == '#')
                stack2.pop();
            else stack2.push(c);
            }
        }
        while (!stack1.isEmpty() && !stack2.isEmpty()){
            char c = stack1.pop();
            char c1 = stack2.pop();
            if(c != c1)
                return false;
            else 
                continue;
        }
        return true;
    }
}

罪过罪过

发布了139 篇原创文章 · 获赞 93 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_43271086/article/details/105152097
今日推荐