gpt4 book ai didi

java - 游程编码,如何去掉只出现一次的字符前的 '1'?

转载 作者:行者123 更新时间:2023-12-02 09:57:04 25 4
gpt4 key购买 nike

我有一个作业问题涉及使用行程编码。问题是,我们不允许在任何只出现一次的字符之前放置“1”。例如,如果您输入AAABBC,我会得到3A2B1A,但我需要得到3A2BA。我缺少一个简单的修复方法吗?

这是我当前的代码:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
String string = "";
Scanner scanner = new Scanner(System.in);
System.out.println("Input:");
String s = scanner.nextLine();

for(int i = 0, count = 1; i < s.length(); i++) {
if (i + 1 < s.length() && s.charAt(i) == s.charAt(i +1))
count++;
else {
string = string.concat(Integer.toString(count))
.concat(Character.toString(s.charAt(i)));
count = 1;
}
}
System.out.println(string);
}
}

最佳答案

只需添加一点额外的逻辑,如果计数为 1,则不打印计数:

for (int i=0, count=1; i < s.length(); i++) {
if (i + 1 < s.length() && s.charAt(i) == s.charAt(i+1)) {
count++;
}
else {
String prefix = count > 1 ? Integer.toString(count) : "";
string = string.concat(prefix)
.concat(Character.toString(s.charAt(i)));
count = 1;
}
}

顺便说一句,您应该使用 StringBuilder 而不是原始字符串连接(尽管 Java 可能会自动选择在幕后为您执行此操作)。

如果您想坚持当前的具体实现,那么您可以尝试以下单行正则表达式清理:

string = string.replaceAll("(?<=(?:\\D|^))1(?=\\D)", "");

关于java - 游程编码,如何去掉只出现一次的字符前的 '1'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55932528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com