2017-04-20 1 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

덕분에 작동합니다 Logged –

0

코드는 루프 후

if (count > 1) { 
    sb.append(count); 
} 
sb.append(previous) 

없습니다.

+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 @ 마이클 Storozhyk –