2017-10-02 3 views
0

내가 Hackerrank에 문자열 문제를 해결하기 위해 작은 Java 클래스를 구현했다 : 유효한 하나를 고려, 자사의 환원성 양식을 찾을 문자열을 감안할 때자바 - 문자열 java.lang.OutOfMemoryError와 : Java 힙 공간

을 연산은 같은 값을 가진 인접한 문자 쌍을 삭제하는 것입니다.

예는 :

"aabcc" would become either "aab" or "bcc" after 1 operation.

하지만, 난 그냥이 오류를 둘러싼 코드 블록에 대해 언급하고자합니다. 내가 꽤 잘 문제를 해결할 수 있었지만, 나는 의 StringBuilder()

의 더 나은 방법을 사용하여 솔루션의 시간 성능을 향상시키기 위해 다른 사람에 의해 유혹하고있어하지만 난 알아 냈하지 않은 이유 의 동작 append()StringBuilder 클래스 메모리 오버플로 또는 어떤 종류의 더 복잡한 misbehavior 발생할 수 있습니다.

static String super_reduced_string(String s){ 
    StringBuilder res = new StringBuilder(); 
    for (int i = 1; i < s.length(); i++){ 
     if (s.charAt(i-1) == s.charAt(i)){ 
      /* waste so much memory leak!!! java.lang.OutOfMemoryError: Java heap space 
      //s = res.append(s.substring(0, i-1)).append(s.substring(i+1)).toString(); 
      */ 
      s = s.substring(0, i-1) + s.substring(i+1); 
      i = 0; 
     } 
    } 
    //then check if it's non-empty, print it out 
    if (s.length() != 0){ 
     return s; 
    } 
    return "Empty String"; 
} 

내가 주석 부분은 위에서 언급 한 잘못된 행동입니다 :

여기에 코드입니다. 제발이 버그를 통해 추론하고 디버깅 해주세요! 그렇게 힘들어서는 안됩니다.

답변

0

s에 할당 한 후 문자열 작성기를 지우십시오.

s = res.append(s.substring(0, i-1)).append(s.substring(i+1)).toString(); 
res.setLength(0); 
관련 문제