2011-04-09 5 views
1

이 알고리즘의 복잡도는 얼마나됩니까? 적어도 O (n^2) 이상인 것 같습니다.가장 긴 palindrome 접두사 complextity

// civic 
public static boolean isCharPalindrome(String test) { 
     String stripped = test.toLowerCase().replaceAll("[^0-9a-zA-Z]", ""); 
     for(int i = 0; i < stripped.length()/2; i++) { 
      if(stripped.charAt(i) != stripped.charAt(stripped.length() - 1 - i)) { 
       return false; 
      } 
     } 
     return true; 
    } 

// ILLINOISURB 
public static String longestPrefixPalindrome(String test){ 
    String max_prefix = test.substring(0,1); 
    for(int i=test.length()-1; i>=0; i--){ 
     String maxPrefix = test.substring(0, i); 
     if(isCharPalindrome(maxPrefix)){ 
      return maxPrefix; 
     } 
    } 

    return max_prefix; 
} 

public static void main(String[] args) { 
    String str = "A man, a plan, a canal, Panama!"; 
    System.out.println("isCharPalindrome:" + isCharPalindrome("A man, a plan, a canal, Panama!")); 
    System.out.println("longestPrefixPal:" + longestPrefixPalindrome("NILLINOISURB")); 
} 
+0

'// TODO 자동 생성 메소드 스텁'이 주석은 메소드를 터치하자마자 제거 될 예정입니다. 직접 작성하면 주석이 잘못되기 때문입니다. –

+0

는 [이론적 인 cs] (http://cstheory.stackexchange.com/)와 비슷합니다. – mbx

+1

이론적 인 cs는 이와 같은 학부 수준의 질문이 아닙니다. 그것은 여기에 속합니다. –

답변

2

예. isCharPalindrome의 복잡성은 O (n)이고 사용자는 longestPrefixPalindrome에서 n 번 호출하므로 복잡성은 O (n^2)입니다.

그러나 가장 긴 접두어로 시작한 다음 테스트 된 접두사의 크기를 줄이면 복잡성을 줄일 수 있습니다. 이렇게하면 paliendrome을 찾자 마자 즉시 방법을 종료 할 수 있습니다. 매번 끝날 때까지 갈 필요가 없습니다.

이에 따라 longestPrefixPalindrome을 변경하는 방법을 알고 계실 것입니다.

@pajton의 대답을보세요. 당신이 그것에 대해 생각한다면 당신은 복잡성을 O (n)까지 줄일 수 있습니다. 제가 준 대답은 실제로 그것에 대한 힌트를 줄 것입니다.

+0

그 대답은 삭제되었습니다. ILLINOISURB에서 'illi'와 같은 접두사를 찾지 못했기 때문입니다. –

+0

예. 하지만이 문제 O (n)의 복잡성을 어떻게 만들 수 있는지 이해 했습니까? – euphoria83

+0

아니요.하지만 임의의 입력에 대해 더 나쁜 것은 아닙니까? 길이가 12 인 문자열 인 Nillinoisurb의 경우 isCharPalindrom 메서드는 12 번 호출되지만 첫 번째 문자표 'N'이 하위 문자열의 마지막 문자와 일치하는지 항상 검색됩니다.이 문자는 한 번만 사용됩니다. 일치하는 경우가 있습니다. 이제 평균 Input이 무엇인지, 첫 번째 문자가 부분 문자열의 다른 문자와 얼마나 자주 일치 하는지를 조사 할 수 있습니다. 물론, 회문은 실생활에서 자주 조사되지 않으므로, 추론 할 경험적 데이터는 없습니다 - 우리는 완전히 인공적인 단어에 대한 이유를 말할 수 있습니다 .... –

관련 문제