难度:简单
题目:
给定
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)
的空间复杂度解决该问题吗?
Related Topics
- 栈
- 双指针
- 字符串
- 模拟
重点!!!解题思路
第一步:
我们用栈来解决这道题
将字符串转换为char数组后
遍历整个数组,当遍历到'#'就弹栈,不是'#'就压栈(注意如果栈为空,不能弹栈)
第二步:
将栈中的字符弹出时需要注意,弹出的顺序要和字符串一开始的顺序一样,不要使用弹栈顺序。
源码:
class Solution {
public boolean backspaceCompare(String s, String t) {
return backspaceCompare(s).equals(backspaceCompare(t));
}
public String backspaceCompare(String s) {
Stack<Character> stack=new Stack<>();
for (char ch:s.toCharArray()) {
if(ch=='#'){
if (!stack.isEmpty()){
stack.pop();
}
}else {
stack.push(ch);
}
}
String ans="";
while (!stack.isEmpty()) ans=stack.pop()+ans;
return ans;
}
}
运行结果:
如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。
系列持续更新中,点个订阅吧