gpt4 book ai didi

java - 实现基本的字符串压缩

转载 作者:行者123 更新时间:2023-12-02 04:26:21 24 4
gpt4 key购买 nike

我正在研究《Cracking The Coding Interview》一书中的问题 1.5。问题是获取一个字符串“aabccccccaaa”并将其转换为a2b1c5a3。

如果压缩后的字符串不小于原始字符串,则返回原始字符串。

我的代码如下。我使用了 ArrayList,因为我不知道压缩后的字符串有多长。

我的输出是[a, 2, b, 1, c, 5], aabc, []。当程序到达字符串末尾时,它也没有字符来比较最后一个字符。

import java.util.*;
import java.io.*;

public class stringCompression {

public static void main(String[] args) {

String a = "aabcccccaaa";
String b = "aabc";
String v = "aaaa";

check(a);
System.out.println("");
check(b);
System.out.println("");
check(v);

}


public static void check(String g){

ArrayList<Character> c = new ArrayList<Character>();
int count = 1;
int i = 0;
int h = g.length();


for(int j = i + 1; j < g.length(); j++)
{
if(g.charAt(i) == g.charAt(j)){
count++;

}

else {
c.add(g.charAt(i));
c.add((char)( '0' + count));
i = j;
count = 1;
}

}


if(c.size() == g.length()){
System.out.print(g);
}

else{

System.out.print(c);
}
}

}

最佳答案

在最后一个循环中,您没有将结果添加到数组中。当j = g.length()时仍然需要将当前的char和count添加到数组中。因此,您可以在增加 j 之前检查 j 的下一个值:

for(int j = i + 1; j < g.length(); j++)


{
if(g.charAt(i) == g.charAt(j)){
count++;

}

else {
c.add(g.charAt(i));
c.add((char)( '0' + count));
i = j;
count = 1;
}

if((j + 1) = g.length()){

c.add(g.charAt(i));
c.add((char)( '0' + count));
}

}

关于java - 实现基本的字符串压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104505/

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