2013-06-18 46 views
0

我已經寫了一個遞歸方法來檢查一個單詞是否是迴文。遞歸回文測試不能包含特殊字符

但我現在也希望檢查任何特殊字符(*?<字符串中。因此,如果字符串是ab.ba它不是一個迴文。

以下是我已經和isAlphanuemerical ()似乎通過它步進時要確定工作,但如果我進入ab.ba

public static boolean isPal(String s) 
{ 
    if(s.length() == 0 || s.length() == 1) 
     return true; 

    // Check if String contains any alphanumeric characters 
    if (isAlphanumeric(s)) 
     return false; 


    if(s.charAt(0) == s.charAt(s.length()-1)) 
     return isPal(s.substring(1, s.length()-1));//if its not the case than string is not. 
    return false; 
} 

而且我isAlphaneumerical()方法,它仍然註冊爲迴文

public static boolean isAlphanumeric(String str) { 
    for (int i = 0; i < str.length(); i++) { 
     char c = str.charAt(i); 
     if (!Character.isLetter(c) && !Character.isDigit(c)) 
      return false; 
    } 
    return true; 
} 

回答

3
if (isAlphanumeric(s)) 
     return false; 

應該

if (!isAlphanumeric(s)) 
     return false; 

而且,你不需要調用isAlphanumeric(S)每次。你可以調用它一次,或者改變它,以便它只檢查第一個/最後一個字符。您正在檢查之前已經檢查過的內容。

public static boolean isPal(String s) 
{ 
    if (!isAlphanumeric(s)) 
     return false; 

    return _isPal(s); 
} 

private static boolean _isPal(String s) 
{ 
    if (s.length() == 0 || s.length() == 1) 
     return true; 

    if (s.charAt(0) == s.charAt(s.length()-1)) 
     return _isPal(s.substring(1, s.length()-1)); 

    return false; 
} 

private static boolean isAlphanumeric(String str) 
{ 
    for (int i = 0; i < str.length(); i++) 
    { 
     char c = str.charAt(i); 

     if (!Character.isLetter(c) && !Character.isDigit(c)) 
      return false; 
    } 
    return true; 
} 
1

你的代碼完全按照你所說的去做。方法isAlphanumeric工作正常。

但您的isPal返回false如果它字母數字。

如果不wan't非字母數字字符串是迴文,然後扭轉你的邏輯:

if (!isAlphanumeric(s)) 
    return false; 

它使用!操作否定布爾結果。