比较含退格的字符串

53 阅读1分钟

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

 

进阶:

  • 你可以用 O(n) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗?
public class BackspaceCompare {
    public static void main(String[] args) {
//        String s = "ab#c";
//        String t = "ad#c";

//        String s ="xywrrmp";
//        String t ="xywrrmu#p";


//        String s ="ab##";
//        String t = "c#d#";

        String s = "bxj##tw";
        String t = "bxj###tw";

        boolean b = backspaceCompare(s, t);
        System.out.println(b);
    }
    public static boolean backspaceCompare(String s, String t) {
        int count1 =0;
        String s2 = "";
        for (int i = s.length()-1; i >=0; i--) {
            char c = s.charAt(i);
            if(c == '#'){
                count1++;
                continue;
            }else if(count1 > 0){
                count1--;
                continue;
            }
            s2 = c+s2;
        }
        int count2 =0;
        String t2 = "";
        for (int i = t.length()-1; i >=0; i--) {
            char c = t.charAt(i);
            if(c == '#'){
                count2++;
                continue;
            }else if(count2 > 0){
                count2--;
                continue;
            }
            t2 = c+t2;
        }
        return s2.equals(t2);
    }
}