给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
输入:S = "ab#c", T = "ad#c" 输出:true 解释:S 和 T 都会变成 “ac”。
输入:S = "ab##", T = "c#d#" 输出:true 解释:S 和 T 都会变成 “”。
笨方法的思路:将S和T分别转换为char数组类型,然后设两个stack,然后用循环,依次来判断,如果该元素!=‘#’,加入stack;否则如果栈不为空的情况下,将元素pop()出;遍历完之后,将两个stack转为string类型;然后相比较。
import java.util.Stack;
public class BackSpaceStringCompare844 {
public boolean backspaceCompare(String S, String T) {
char[] chs1 = S.toCharArray();
char[] chs2 = T.toCharArray();
Stack<Character> stack1 = new Stack<>();
Stack<Character> stack2 = new Stack<>();
for (int i = 0; i < chs1.length; i++) {
if (chs1[i] != '#') {
stack1.add(chs1[i]);
} else if (!stack1.isEmpty()) {
stack1.pop();
}
}
S = stack1.toString();
for (int i = 0; i < chs2.length; i++) {
if (chs2[i] != '#') {
stack2.add(chs2[i]);
} else if (!stack2.isEmpty()) {
stack2.pop();
}
}
T = stack2.toString();
if (S.equals(T)) {
return true;
} else {
return false;
}
}
}
官方给的代码那叫一个“nice”
设了一个build(),减短了代码。
public boolean backspaceCompare(String S, String T) {
return build(S).equals(build(T));
}
public String build(String S) {
Stack<Character> ans = new Stack();
for (char c : S.toCharArray()) {
if (c != '#') {
ans.push(c);
} else if (!ans.empty()) {
ans.pop();
}
}
return String.valueOf(ans);
}
end.