- 就是对对碰游戏的思想,每次做了删除还要看看新组成的字符串与之前的是否构成重复。
为了避免每次重头再来,需要记录删除重复项的第一个位置。
class Solution {
public String removeDuplicates(String s) {
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < sb.length(); ) {
if (i > 0 && sb.charAt(i) == sb.charAt(i - 1)) {
sb.delete(i - 1, i + 1);
i = i - 1;
} else {
i++;
}
}
return sb.toString();
}
}
这个方法是因为sb经常都在变化,所以耗时也比较多。
- 使用栈的方法,每次进栈的时候检查元素是否相同,相同就把之前的弹出,而且自己也不进栈。
最后输出的元素就是栈弹出来,并逆序。 - 知识点
StringBuilder的实际长度用length()方法,总容量用capacity()方法。
删除的两种方法:
public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):删除从指定位置开始到指定位置结束的内容,并返回本身