题目来源于力扣(LeetCode)
一、题目
题目相关标签:栈、双指针
提示:
1 <= S.length <= 200
1 <= T.length <= 200
S
和T
只含有小写字母以及字符'#'
。
二、解题思路
-
对两个字符串进行去 # 号的操作
-
遍历两个字符串,遇到 # 号且栈中不为空时,弹出栈顶元素,即表示退格的操作
-
为字母字符时,将字母字符压入栈中
-
最后判断两个字符串是否元素相同
三、代码实现
public static boolean backspaceCompare(String S, String T) {
// 空值判断及字符串长度为 0 的判断
if (null == S || S.isEmpty() || null == T || T.isEmpty()) {
return false;
}
char[] sarr = S.toCharArray();
char[] tarr = T.toCharArray();
// 判断去除 # 后号的字符串是否相等
return elementToStack(sarr).equals(elementToStack(tarr));
}
public static String elementToStack(char[] arr) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == '#') {
if (!stack.empty()) {
stack.pop();
}
} else {
stack.push(arr[i]);
}
}
return new String().valueOf(stack);
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
String S = "ab#c", T = "ad#c"; // output: true
// String S = "ab##", T = "c#d#"; // output: true
// String S = "a##c", T = "#a#c"; // output: true
// String S = "a#c", T = "b"; // output: false
boolean result = backspaceCompare(S, T);
System.out.println(result);
}