1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public String removeDuplicates(String s) {
char[] sArray = s.toCharArray();
int left = 0, right = 1;
while (right < sArray.length) {
if (left != -1 && sArray[left] == sArray[right]) {
left -= 1;
} else {
sArray[left + 1] = sArray[right];
left += 1;
}
right += 1;
}
StringBuilder ans = new StringBuilder();
for (int i = 0; i <= left; i++) {
ans.append(sArray[i]);
}
return ans.toString();
}
}

two pointers.

时间复杂度: O(n)
空间复杂度: O(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public String removeDuplicates(String s) {
StringBuilder ans = new StringBuilder();
int length = 0;
for (int i = 0; i < s.length(); i++) {
if (length != 0 && ans.charAt(length - 1) == s.charAt(i)) {
ans.deleteCharAt(length - 1);
length -= 1;
} else {
ans.append(s.charAt(i));
length += 1;
}
}
return ans.toString();
}
}

这个的话更加简洁. 用StringBuilder充当stack.

时间复杂度: O(n)
空间复杂度: O(n - d) d是所有duplicates的长度加在一起(也就是被抵消的duplicates加在一起)