leecode844比较含有退格的字符串
leecode844比较含有退格的字符串
代码分析
暴力解法
class Solution {
public boolean backspaceCompare(String s, String t) {
//暴力解法
int s_length=s.length();
int t_length=t.length();
char[] ch1 = new char[s_length];
char[] ch2 = new char[t_length];
int fast=0,low=0;
for(fast=0;fast<s_length;fast++){
if(s.charAt(fast)!='#'){
ch1[low] = s.charAt(fast);
low++;
}else {
low--;
ch1[low]='\u0000';
}
}
low=0;
//没有考虑第一个是回车符号,这样的话我们数组的范围可能是错误的
for(fast=0;fast<t_length;fast++){
if(t.charAt(fast)!='#'){
ch2[low] = t.charAt(fast);
low++;
}else {
low--;
ch1[low]='\u0000';
}
}
//然后比较这两个字符数组就可以了
//我们可以直接比较这两个字符数组
//int max = s_length>t_length?s_length:t_length;
fast= 0;
low=0;
while(ch1[fast]!='\u0000'&&ch2[low]!='\u0000'){
if(ch1[fast]!=ch2[low]){
return false;
}
fast++;
low++;
}
if(ch1[fast]=='\u0000'&&ch2[low]=='\u0000'){
return false;
}
return true;
/*s=new String(ch1);
t= new String(ch2);
if(s.equals(t)){
return true;
} else return false;*/
}
建立stringBuilder快速模拟栈的操作
StringBuilder ssb = new StringBuilder(); // 模拟栈
StringBuilder tsb = new StringBuilder(); // 模拟栈
// 分别处理两个 String
for (char c : s.toCharArray()) {
if (c != '#') {
ssb.append(c); // 模拟入栈
} else if (ssb.length() > 0){ // 栈非空才能弹栈
ssb.deleteCharAt(ssb.length() - 1); // 模拟弹栈
}
}
for (char c : t.toCharArray()) {
if (c != '#') {
tsb.append(c); // 模拟入栈
} else if (tsb.length() > 0){ // 栈非空才能弹栈
tsb.deleteCharAt(tsb.length() - 1); // 模拟弹栈
}
}
return ssb.toString().equals(tsb.toString());
本文作者:TranquilGlow
本文链接:https://www.cnblogs.com/xuehaiqiule/p/17621644.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步