2014-10-30 26 views
2

使用java和循環壓縮字符串的方法。例如,如果DC =「aabbbccaaaaba,則c =‘aab3cca4ba’這是我迄今。請幫助/指導。謝謝。壓縮超過2的字符串 - 循環

 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); 

回答

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); 

編輯: 更改了示例以使用常規字符串而不是StringBuilder。不過,我真的建議不要這樣連接字符串,特別是如果你想壓縮的字符串很長。

+0

謝謝,但我不能使用append。 – Sam 2014-10-31 00:01:10

+0

@Sam爲什麼你不能? – 2014-10-31 00:01:52

+0

建議在構建帶有循環的字符串時不要對字符串進行分組。如果你不想使用它,你可以使用一個普通的字符串來代替:String sb =「」;並使用它來代替append:sb + = c; – habitats 2014-10-31 00:03:11

0

它可能會更容易得到你想要的東西用刺。 。toCharArray()

然後據此操作陣列

+0

我不能使用它。僅用於/ while循環,ifs,charAt()和其他基本運算符。 – Sam 2014-10-30 23:50:36

+0

那麼你現在的方法是行不通的? – 2014-10-30 23:55:51

+0

沒有。我也不能使用追加。 – Sam 2014-10-31 00:00:11

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++; 
    } 

這是有點不完整,但如果你遵循的邏輯,我認爲這是你在找什麼。我不會爲你做你的任務。

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()); 

}