题目:
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
提示:
1 <= S.length <= 20000
S 仅由小写英文字母组成。
示例:

代码:
- 解法一
class Solution {
public String removeDuplicates(String S) {
int n = S.length();
int i = 0;
char[] c = new char[n]; //创建一个新数组
for (int j = 0; j < n; j++) { //遍历字符串S
if (i > 0 && c[i - 1] == S.charAt(j)) { //标记i>0并且相邻的两个字符相等时
i--; //标记i--
} else {
c[i++] = S.charAt(j); //将当前字符存入数组c中
}
}
return new String(c, 0, i); //以字符串的形式返回数组中从角标0开始的i个元素
}
}
- 解法二
//与解法一思路相似 只是没有创建新数组 在原来数组上直接进行移动
class Solution {
public String removeDuplicates(String S) {
char[] cs = S.toCharArray(); //将字符串转化为字符数组
int len = 0;
for(int i = 0; i < cs.length; i++){
char cc = cs[i];
if(len!=0 && cc==cs[len-1]) --len; //当前字符和其相邻的前一个字符相等时 标记len--
else cs[len++]=cc; //否则 将当前字符赋给标记位置的值
}
char[] ret = Arrays.copyOf(cs,len);
return new String(ret); //返回结果
}
}
该博客介绍了LeetCode第1047题的解决方案,主要讨论如何删除给定字符串中所有相邻的重复字符。文章提供了两种不同的Java实现方法来解决这个问题。
807

被折叠的 条评论
为什么被折叠?



