压缩字符串长于2 - 循环

时间:2014-10-30 23:34:47

标签: java string loops compression

使用java和循环压缩字符串的方法。例如,如果dc =" aabbbccaaaaba,那么c =" aab3cca4ba"这是我到目前为止所拥有的。请帮忙/指导。感谢。

        int cnt = 1;
        String ans = "";
        for (int i = 0; i < dc.length(); i++) {
            if ((i < dc.length()) && (dc.charAt(i) == dc.charAt(i++)) && (dc.charAt(i) == dc.charAt(i+=2))){
                cnt++;
                ans = ans + dc.charAt(i) + cnt;
            }
            else
                ans = ans + dc.charAt(i);

            setC(ans);

4 个答案:

答案 0 :(得分:1)

除非你被限制使用for循环,否则我相信这会有所帮助:

String sb = "";
for (int i = 0; i < dc.length(); i++) {
  char c = dc.charAt(i);
  int count = 1;
  while (i + 1 < dc.length() && (dc.charAt(i + 1)) == c) {
    count++;
    i++;
  }
  if (count > 1) {
    sb += count;
  }
  sb += c;
}

System.out.println(sb);

编辑: 更改示例以使用常规String而不是StringBuilder。但是,我真的建议不要以这种方式连接字符串,特别是如果您尝试压缩的字符串很长。

答案 1 :(得分:0)

使用Sting.toCharArray()可能更容易得到你想要的东西。

然后相应地操纵数组。

答案 2 :(得分:0)

 String dc = "aabbbccaaaaba";
 String and = "";
  int index = 0;
  int cnt = 2;
  While(dc.charAt(index) != null){
  int index1 = index + 1;
  char j = dc.charAt(index)
  While(j.equals(dc.charAt(index1)){
  cnt++;
  }
  //more code
  index++;
  } 

它有点不完整但如果你遵循逻辑,我认为它是你正在寻找的东西。我不会为你做任务。

答案 3 :(得分:0)

最简单的解决方案: - 只有一个for循环,时间复杂度 - O(n)

public static void main(String[] args) {
    String str = "aabbbccaaaaba";
    char[] arr = str.toCharArray();
    int length = arr.length;


    StringBuilder sb = new StringBuilder();

    int count=1;

    for(int i=0; i<length; i++){
        if(i==length-1){
            sb.append(arr[i]+""+count);
            break;
        }

        if(arr[i]==arr[i+1]){
            count++;
        }
        else{
            sb.append(arr[i]+""+count);
            count=1;
        }
   }
    System.out.println(sb.toString());

}