给定 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#"));
}
}