2016-03-10 25 views
0

我無法將以下代碼重寫爲遞歸方法,而不是使用for循環。 for循環測試以查看字符串'noSpaces'是否是迴文(相同的向前和向後)。 noSpaces字符串沒有標點符號,空格或大小寫不同。重寫一個for循環作爲遞歸方法?

感謝您的幫助

public boolean isRegularPalindrome(String noSpaces) { 
    noSpaces = noSpaces.toUpperCase(); 
    String[] letters = new String[noSpaces.length()]; 
    for (int i = 0; i < letters.length; i++) { 
     letters[i] = Character.toString(noSpaces.charAt(i)); 
    } 

    for (int i = 0; i < letters.length/2; i++) { 
     if (!letters[i].equals(letters[letters.length - i - 1])) { 
      return false; 
     } 
    } 
    return true; 
} 
+0

你過分複雜的解決方案。不需要將字符串轉換爲單字符字符串數組。只要執行'if(noSpaces.charAt(i)!= noSpaces.charAt(noSpaces.length() - 1 - i))return false;'。然後用這個簡單的方法,你可能會發現將它變成遞歸的更容易。 –

+0

這是一個功課題嗎? –

+0

http://stackoverflow.com/questions/4367260/creating-a-recursive-method-for-palindrome –

回答

2

寫一個遞歸算法用於任何需要基本情況​​。對於迴文,這將是長度爲0或長度爲1的字符串 - 如果字符串長度爲0或1,則爲迴文。
如果基本情況不符合,您檢查第一個字符對最後一個字符。
如果字符不相同,則返回false。
如果字符相同,則將遞歸調用返回到除第一個和最後一個字符以外的字符串。
代碼應該看起來像這樣。

public boolean isPalindrome(string str){ 
if (str.length == 0) 
    return true; 
else if (str.length == 1) 
    return true; 
else if(str.charAt(0) != str.charAt(str.length - 1) 
    return false; 
else 
    return isPalindrome(str.substring(1, length - 1)); 
} 
1

你去那裏:

public static boolean isPalindrome(String input) { 
    if (input.charAt(0) != input.charAt(input.length() - 1)) { 
     // Missmatch. Not a palindrome! 
     return false; 
    } else if (input.length() > 1){ 
     // If there is more to test, continue. 
     return isPalindrome(input.substring(1, input.length() - 1)); 
    } else { 
     // All chars were tested, or 1 char input. Palindrome! 
     return true; 
    } 
} 
+0

如果你願意接受你喜歡的答案之一,這將是很好的;) –