LeetCode 题库 全 JAVA 解题
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 只含有小写字母以及字符 ‘#’。
思路
简单的对栈进行运用
设置出栈和入栈的条件
代码(他人)
class Solution {
public boolean backspaceCompare(String S, String T) {
//创建两个栈
Stack<Character> s =new Stack<>();
Stack<Character> t =new Stack<>();
//规定入栈条件
for (Character c:S.toCharArray()){
//当前字符为'#'且栈s非空,出栈,当前字符不为#则入栈
if (c == '#'&& !s.isEmpty())
s.pop();
else if (c!='#')
s.push(c);
}
for (Character c:T.toCharArray()){
if (c == '#'&& !t.isEmpty())
t.pop();
else if (c!='#')
t.push(c);
}
//若两个栈大小不等,则返回false
if (s.size()!=t.size()){
return false;
}
//栈s非空,且栈t非空下,两个栈逐一出栈对比
while(s.size()!=0){
if(!s.isEmpty() && !t.isEmpty() && s.pop()!=t.pop())
return false;
}
return true;
}
}