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