2017-04-20 72 views
-2

例如,如果我有一個輸入像:爪哇RLE升級算法

Heeeeeeeeeeeellooooo

輸出必須是:

H9e3e2l5o

這是我到目前爲止寫的代碼:

public class RLE { 
     public static String encode(String s) { 
      if (s == "" || s == null) return ""; 
      StringBuilder sb = new StringBuilder(); 
      int count = 1; 
      char previous = s.charAt(0); 
      char current; 

      for (int i = 1; i < s.length(); i++) { 
       current = s.charAt(i); 
       if (current == previous) { 
        count++; 
       } else { 
        if (count == 1) { 
         sb.append(previous); 
        } else if (count > 1) { 
         sb.append(count).append(previous); 
         count = 1; 
        } 
       } 
       previous = current; 

      } 

      return sb.toString(); 
     } 

結果:

'Heeeeeeeeeeeellooooo' - > H12e2l

+4

你的問題是工作? –

+3

我知道你的代碼不能提供預期的輸出。但是我不明白 - 那個說你的Hello應該導致H9e3e的規則是什麼......(你的第一個例子是把12分成9 + 3 ......但是......爲什麼?爲什麼是9 + 3? – GhostCat

回答

2

這會爲你

public static String encode(String s) { 
    if (s == "" || s == null) 
     return ""; 
    StringBuilder sb = new StringBuilder(); 
    int count = 1; 
    char previous = s.charAt(0); 
    char current; 

    for (int i = 1; i < s.length(); i++) { 
     current = s.charAt(i); 
     if (current == previous) { 
      count++; 
     } else { 
      if (count == 1) { 
       sb.append(previous); 
      } else if (count > 1) { 
       if (count > 9) { 
        sb.append(9).append(previous); 
        sb.append(count - 9).append(previous); 
       } else { 
        sb.append(count).append(previous); 
       } 
       count = 1; 
      } 
     } 
     previous = current; 

    } 
    sb.append(count).append(previous); 
    return sb.toString(); 
} 
+0

謝謝你的工作 –

0

代碼缺失

if (count > 1) { 
    sb.append(count); 
} 
sb.append(previous) 
for循環之後

+0

感謝您的遺漏部分 –

0

您錯過了字符串的最後一個字符等於上一個字符的情況,那麼這不是打印。添加增量邏輯,如果(當前==以前)的情況下也

    if (current == previous) { 
        count++; 
        if(i == s.length()-1){ 
         if (count == 1) { 
          sb.append(previous); 
         } else if (count > 1) { 
          sb.append(count).append(previous); 
          count = 1; 
         } 
        } 
       } 
+0

謝謝你缺少的邏輯 –

+0

你可以接受答案和upvote @Michael Storozhyk –