gpt4 book ai didi

java - Java中的字符串压缩算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:01 25 4
gpt4 key购买 nike

我希望实现一种以以下形式执行基本字符串压缩的方法:

aabcccccaaa -> a2b1c5a3

我有这个程序:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

String str = sc.nextLine();

System.out.println(compress(str));
}

public static String compress(String str) {
char[] chars = str.toCharArray();

int count = 0;
String result = "";

for (int i = 0; i < chars.length; i++) {
char curr = chars[i];
result += curr;

for (int j = i; j < chars.length; j++) {
if (chars[j] == curr) {
count++;
}
else {
i += count;
break;
}
}
result += count;
count = 0;
}

return result;
}

}

但在我的测试中,我总是漏掉最后一个字符数。

我假设这是因为程序在它应该之前退出了内部 for 循环,但为什么会这样?

非常感谢

最佳答案

你不需要两个 for 循环,可以像这样一次性完成

    String str = "aaabbbbccccca";
char[] chars = str.toCharArray();
char currentChar = str.length() > 0 ? chars[0] : ' ';
char prevChar = ' ';
int count = 1;
StringBuilder finalString = new StringBuilder();

if(str.length() > 0)
for(int i = 1; i < chars.length; i++)
{
if(currentChar == chars[i])
{
count++;
}else{
finalString.append(currentChar + "" + count);
prevChar = currentChar;
currentChar = chars[i];
count = 1;
}
}

if(str.length() > 0 && prevChar != currentChar)
finalString.append(currentChar + "" + count);

System.out.println(finalString.toString());

输出是:a3b4c5a1 代表 aaabbbbccccca

关于java - Java中的字符串压缩算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41028692/

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