快慢指针
思路快慢指针,整体想的是对的,首先把字符串转为数组,快指针遍历数组,慢指针对#
字符进行处理。最后提交所有测试用例都返回false,没想到应该把fast遍历数组结束后,slow后面的直接删除在对两个字符串进行比较。
确实对Java的一些函数不熟悉,希望在联系题目的过程中多多积累😊
class Solution {
public boolean backspaceCompare(String s, String t) {
char[] ss = s.toCharArray();
char[] tt = t.toCharArray();
return getString(ss).equals(getString(tt));
}
String getString(char[] c){
int slow = 0;
for(int fast = 0; fast < c.length; fast++){
if(c[fast] != '#'){
c[slow++] = c[fast];
}else{
if(slow > 0){
slow--;
}
}
}
// 创建了一个新的 String 对象,然后从这个对象中提取一个子字符串
return new String(c).substring(0,slow);
}
}
toCharArray():把字符串整体转化成数组
equals():用于比较两个对象是否相等,如果两个对象的内容或状态相同,则返回true,否则返回false
substring():可以根据起始索引和结束索引来提取子字符串
第二种方法(学习):栈
栈方法很清晰,不会写栈的代码,SOS /(ㄒoㄒ)/~~
class Solution {
public boolean backspaceCompare(String S, String T) {
return build(S).equals(build(T));
}
public String build(String str) {
// 创建一个 StringBuffer 对象用于存储最终的字符串
StringBuffer ret = new StringBuffer();
int length = str.length();
for (int i = 0; i < length; ++i) {
// 获取当前字符
char ch = str.charAt(i);
// 如果当前字符不是退格符
if (ch != '#') {
// 将当前字符添加到 StringBuffer 对象中
ret.append(ch);
} else {
// 如果 StringBuffer 对象中还有字符
if (ret.length() > 0) {
// 删除 StringBuffer 对象中的最后一个字符
ret.deleteCharAt(ret.length() - 1);
}
}
}
// 将 StringBuffer 对象转换为字符串并返回
return ret.toString();
}
}
作者:力扣官方题解
链接:https://leetcode.cn/problems/backspace-string-compare/solutions/451606/bi-jiao-han-tui-ge-de-zi-fu-chuan-by-leetcode-solu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
chartAt():用于获取字符串中指定索引位置的字符
append():Java中 StringBuilder 和 StringBuffer 类的一个方法,用于向现有的字符串后面添加一个新的字符串或字符序列
deleteCharAt(): Java中 StringBuffer 和 StringBuilder 类的一个方法,用于删除字符串中指定索引位置的字符