0
点赞
收藏
分享

微信扫一扫

比较含退格的字符串

alanwhy 2023-06-15 阅读 56


比较含退格的字符串

题目:
给定 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 只含有小写字母以及字符 ‘#’。

解题思路: 看到题目就想到了用栈或者StringBuffer, 最后选择了StringBuffer, 在字符串中查找’#‘找到了就判断’#‘下标是否为0, 如果为0说明’#‘前没有字符就只需要删除’#’, 否则就删除’#'和前一个字符.

class Solution {
    public boolean backspaceCompare(String S, String T) {
        StringBuffer s = new StringBuffer(S);
        StringBuffer t = new StringBuffer(T);
        
        f(s);
        // System.out.println("s = " + s);
        f(t);
        // System.out.printf("t = %s", t);
        return s.toString().equals(t.toString());
    }
    
    private void f(StringBuffer s) {
        int idx = s.indexOf("#");
        while(idx != -1) {
            if(idx == 0) {
                s.deleteCharAt(idx);
            }
            
            else s.delete(idx - 1, idx + 1);
            // System.out.println(s);
            idx = s.indexOf("#");
        }
    }
}

ps:需要注意的一个点是: StringBuffer的equals方法没有进行重写, 所以要比较两个StringBuffer是否相等需要转化成String进行比较.


举报

相关推荐

0 条评论