【发布时间】:2021-06-19 13:57:07
【问题描述】:
我正在尝试遍历一个字符串并删除连续的重复字母。
ABBACBAABCB-->AACBAABCB-->CBAABCB-->CBBCB-->CCB-->B
我的想法是遍历字符串并在 do-while 循环中删除重复项。
我的代码:
class Main {
public static String list = "ABBACBAABCB";
public static boolean notvalid = true;
public static void main(String[] args) {
do {
String r = Iterate(list);
isvalid(r);
//list = r does not work
} while (notvalid);
}
public static String Iterate(String str) {
for (int i = 1; i < list.length(); i = i + 1) {
char Curr = list.charAt(i);
char Prev = list.charAt(i - 1);
if (Curr == Prev) {
String results = str.substring(0, i - 1)
+ str.substring(i, str.length());
return results;
}
}
return str;
}
public static void isvalid(String str) {
for (int i = 1; i < str.length(); i = i + 1) {
char curr = str.charAt(i);
char prev = str.charAt(i - 1);
if (curr == prev) {
notvalid = true;
return;
}
}
notvalid = false;
return;
}
}
显然这不起作用,它只是永远循环。
根据我收集到的信息,您不能在 java 上执行 list = results,因为字符串是不可变的。
如何用 Java 做到这一点?
【问题讨论】:
-
由于字符串是不可变的,因此您必须通过遍历字符串并将要保留的字符复制到单独的位置来做到这一点。您如何做到这一点并跳过重复项?
-
手动把字符串转成数组,对数组做同样的事情?
-
您无法就地执行此操作,您需要单独的输入和输出位置。您不需要手动使用数组。
-
我发布了我解决它的方法。如果您有更优雅的解决方案,我很感兴趣。我的感觉很复杂,而且我认为默认情况下字符串是 char 数组。
-
字符串
"AAAB"的预期结果是什么,如果两个A字符相互抵消以生成"AB",或者三个字符全部抵消以生成"B"?
标签: java string algorithm replace duplicates