/**
给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
示例:
输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
提示:
1 <= S.length <= 20000 caabbc aa bb cc aabb cc
S 仅由小写英文字母组成
*/
解法(一)
public String removeDuplicates(String s) {
//这里采用String操作字符串两大类之一的StringBuilder实现
//将入参的字符串转换类型
StringBuilder stringBuilder = new StringBuilder(s);
//将入参的字符串转换为数组
String[] strArray = stringBuilder.toString().split("");
//循环字符串的长度去进行比较,删除相近的两个字母
for (int i = 0; i < stringBuilder.length() - 1; i++) {
//因为是字符串转换的数组所以每次递归的字符串和数组的元素下标对应
//判断当前两个元素的内容是否一样,一样的话从StringBuilder中删除掉继续递归
if (strArray[i].equals(strArray[i + 1])) {
stringBuilder.deleteCharAt(i);
stringBuilder.deleteCharAt(i);
return removeDuplicates(stringBuilder.toString());
}
}
return stringBuilder.toString();
}
解法(二)原理同上
public static String remove(String str){
int lat = 0;
byte[] bytes = str.getBytes();
for (int i = 0; i < bytes.length-1; i++) {
if (bytes[i] == bytes[i+1]) {
lat=i;
str = str.substring(0,lat)+str.substring(lat+2);
return remove(str);
}
}
return str;
}
如果大家还有更好的结题方法欢迎评论区投稿,互相进步。
版权声明:本文为qq_45467537原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。