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

标签 java string arraylist char compression

我正在研究《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/

相关文章:

java - 将元素添加到 ArrayList 的正确位置

Java使用utf-8编码解码十六进制值

java - Rest API 方法正在返回值,但仍然收到 500 错误

Java Thread ,答案是A怎么来的?

python - 将文本列表格式化为列

C#字符串 "likeness"对比测试

Java库兼容性问题-NULL指针异常

java - 在 java String.format 中转义格式化字符

java - HashMap<UUID,ArrayList<>>, arraylist 不会存储值

java - 如何访问添加到 ArrayList 的数组(2-d)?