gpt4 book ai didi

java - 递归回文 java 程序的干净字符串方法?

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:53 25 4
gpt4 key购买 nike

这是一个递归程序,用于测试一个句子是否为回文。如果我写“bob”而不是“Madam I'm Adam”,它会正确运行,因为大写字母和符号。我们需要使用干净的字符串方法(?)来消除空格、符号和大写字母。这就是我所拥有的,但我认为我没有正确实现它。有人可以告诉我如何改进/解决这个问题吗? (是的,我在网上找遍了)

import java.util.Scanner;

public class Palindromes {

public static boolean isaPalindrome(String s) {

String cleanedString = clean(s);
if (s.length() == 0 || s.length() == 1)
return true;
if (s.charAt(0) == s.charAt(s.length() - 1))
return isaPalindrome(s.substring(1, s.length() - 1));
return false;
}

public static void main(String[] args) {
System.out.print("Enter a palindrome to test: ");

Scanner console = new Scanner(System.in);

String inStr = console.nextLine();

if (isaPalindrome(inStr)) {

System.out.printf("The input string, %s, is a palindrome.\n",
inStr);

reverseStr(inStr); // must be recursive!

System.out.println();
} else {
System.out.printf("The input string, %s, is not a palindrome.\n",
inStr);
}
}

private static String clean(String s) {

String cleaned = "";
return cleaned;
}

private static String reverseStr(String inStr) {
if ((null == inStr) || (inStr.length() <= 1)) {
return inStr;
}
return reverseStr(inStr.substring(1)) + inStr.charAt(0);
}
}

最佳答案

你的递归方法 isaPalindrome 是正确的。如果您想进一步改进它,我建议您避免使用 subString 为递归调用创建参数,这会创建太多字符串。

相反,跟踪您正在比较的原始字符串中字符的位置:

public static boolean isaPalindrome(String s, int leftIndex, int rightIndex) {
if (leftIndex == rightIndex) return true;

if (s.charAt(leftIndex) == s.charAt(rightIndex))
return isaPalindrome(s, leftIndex + 1, rightIndex - 1);
return false;
}

您可以调用该方法:isaPalindrome(inStr, 0, inStr.length() - 1)

至于你的clean方法,你可以使用toLowerCaseCharacter.isLetter方法来处理原始字符串。

private static String clean(String s) {
String lowerCaseString = s.toLowerCase();

StringBuffer result = new StringBuffer();

for (int i = 0; i < lowerCaseString.length(); ++i) {
if (Character.isLetter(lowerCaseString.charAt(i))) {
result.append(lowerCaseString.charAt(i));
}
}

return result.toString();
}

关于java - 递归回文 java 程序的干净字符串方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33838966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com