844. 比较含退格的字符串
题目链接:https://leetcode.cn/problems/backspace-string-compare/
题目分析
刚看到题目想到的是用栈,遇到字符入栈,然后遇到’#‘弹出栈顶元素,最后根据情况比较栈中剩余元素。Java中可以直接使用StringBuffer来模拟栈。这种方法就不过多赘述了。
下面介绍的是双指针的方法。我比较菜,一开始没想出来怎么用双指针实现。然后看了下题解,整理一下思路。
因为’#'只会删除前面一个字符,并不会对后面的字符产生影响,所以选择从后向前遍历字符。代码中加了详细注释就不在这赘述了。值得注意的是最后一个else,p、q是用来循环两个字符串,如果当其中一个字符串循环到头了,但是另一个字符串还没有成空串,那就是不相等的情况,返回false。
class Solution {
public boolean backspaceCompare(String s, String t) {
int p = s.length() - 1, q = t.length() -1;
int skipS = 0,skipT = 0;
//大循环,用来判断字符串是否遍历完毕
while(p >= 0 || q >= 0){
//循环s,直到未被删除的第一个值
while(p >= 0){
if(s.charat(p) == '#'){
skipS++;
p--;
}else if(skipS > 0){
//此时说明当前值不是“#”,但是#个数大于0,所以当前值需要被删除
skipS--;
p--;
}else{
//如果不是上面两种情况,就说明当前值需要和t中当前值比较是否相等
break;
}
}
//循环t
while(q >= 0){
if(t.charat(q) == '#'){
skipT++;
q--;
}else if(skipT > 0){
//此时说明当前值不是“#”,但是#个数大于0,所以当前值需要被删除
skipT--;
q--;
}else{
//如果不是上面两种情况,就说明当前值需要和t中当前值比较是否相等
break;
}
}
//比较p和q的当前值
if(p >= 0 && q >= 0){
if(s.charat(p) != t.charat(q)){
return false;
}
}else {
//如果有一个坐标<0就说明字符被删完了,返回false
if (p >= 0 || q >= 0) {
return false;
}
}
p--;
q--;
}
return true;
}
}
原文地址:https://www.jb51.cc/wenti/3280714.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。