题目
方法一:单指针
首先每次进入循环处理之前需要对第一个字符进行判断,若是退格符,直接删掉,结束此次循环 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 ( ) ; }
方法三:栈