题目

方法一:单指针
- 首先每次进入循环处理之前需要对第一个字符进行判断,若是退格符,直接删掉,结束此次循环
- fast从0开始,如果fast指向的字符不为# fast往后移动
- 如果fast指向的字符为 # 则删除 fast前面一个字符 和fast指向的字符 然后重置fast指针到起始点继续循环,直到没有#号符为止
- 在判断处理完的两个字符串是否相等
public boolean backspaceCompare(String s, String t) {return letter(s).equals(letter(t));}public String letter(String s){StringBuffer str = new StringBuffer(s);int fast = 0;while(fast< str.length()){if(str.charAt(0) == '#') { str = str.delete(0,1);continue;} if(str.charAt(fast) != '#') fast++;else{str = str.delete(fast-1,fast+1);fast = 0;}}return str.toString();}
方法二:双指针
- 定义一个尾部指针,和#号计数器
- 如果尾部指针遇到# ,删除#号同时 让#号计数器+1
- 如果遇到字符,根据#计数器的数量来删除字符,每遇到一个字符,如果#号计数器大于0,则直接删除字符。
- 若遇到字符时,#号计数器=0,说明之前没有退格符,则尾部指针直接往前移动
- 直到尾部指针<0,代表处理完成
public boolean backspaceCompare(String s, String t) {return letter(s).equals(letter(t));}public String letter(String s){StringBuffer str = new StringBuffer(s);int end = str.length()-1;int temp = 0;while(end >= 0){if(str.charAt(end)=='#') {temp++;str.delete(end,end+1);}else{if(temp > 0){str.delete(end,end+1);temp--;}}end--;}return str.toString();}
方法三:栈