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

package leecode;
import java.util.Stack;
public class BackspaceCompare {
    //方法1:很简单巧妙
    public boolean backspaceCompare(String S, String T) {
        return sol(S).equals(sol(T));
    }

    public String sol(String s){
        StringBuilder sb=new StringBuilder();
        for(char c:s.toCharArray()){
            //如不是'#',则加入到sb
            if(c!='#'){
                sb.append(c);
            }
            //否则是'#',并且sb不为空,则删除sb中最后一个元素(必须要判断sb不为空,如果为空,删除会出异常)
            else {
                if (sb.length() > 0) //关键之处
                    sb.deleteCharAt(sb.length() - 1);//deleteCharAt()函数
            }
        }
        return sb.toString();

    }

    //方法2:栈思想,和方法1类似思想
    public boolean backspaceCompare2(String S, String T) {
        return compute(S).equals(compute(T));
    }
    private Stack<Character>compute(String s){
        Stack<Character>stack=new Stack<>();
        for(char c:s.toCharArray()){
            if(c!='#'){
                stack.push(c);
            }else{
                if(!stack.isEmpty())
                    stack.pop();
            }
        }
        return stack;
    }

    //方法3:直接将#前面的字符替换为#,将不为#的字符加入到sb
        public boolean backspaceCompare3(String S, String T) {
            return backspace(S).equals(backspace(T));
        }
        public String backspace(String str){
            char[] c=str.toCharArray();
            int valid=0;
            for (int i = 0; i < c.length; i++) {
                if(c[i]!='#')
                    valid++;
                //否则是#,则将#前一个替换为#
                else {
                    if(valid==0) continue;
                    else {
                        for (int j = i-1; j >= 0 ; j--) {
                            if(c[j]!='#'){
                                c[j]='#';
                                valid--;
                                break;
                            }
                        }
                    }
                }
            }
            StringBuilder sb=new StringBuilder();
            for (char ch : c) {
                if(ch!='#')
                    sb.append(ch);
            }
            return sb.toString();
        }

    public static void main(String[] args) {
        BackspaceCompare rs=new BackspaceCompare();
        System.out.print(rs.backspaceCompare("ab#c","ad#c")+",");
        System.out.print(rs.backspaceCompare("a#c","b")+",");
        System.out.print(rs.backspaceCompare("a##c","#a#c")+",");
        System.out.println(rs.backspaceCompare("ab##","c#d#"));

        System.out.print(rs.backspaceCompare2("ab#c","ad#c")+",");
        System.out.print(rs.backspaceCompare2("a#c","b")+",");
        System.out.print(rs.backspaceCompare2("a##c","#a#c")+",");
        System.out.println(rs.backspaceCompare2("ab##","c#d#"));

        System.out.print(rs.backspaceCompare3("ab#c","ad#c")+",");
        System.out.print(rs.backspaceCompare3("a#c","b")+",");
        System.out.print(rs.backspaceCompare3("a##c","#a#c")+",");
        System.out.println(rs.backspaceCompare3("ab##","c#d#"));


    }
}

猜你喜欢

转载自blog.csdn.net/hefenglian/article/details/80555688