所以,我正在做这个名为valid palindrome的挑战,我被困住了。
我的代码适用于小/中等字符串但是当它运行时,我收到Time Limit Exceeded
消息,这意味着必须有更好的方法来优化我的代码。
我正在考虑使用charAt()
并执行类似...因为它是一个回文...将它分成两半并快速检查for循环中的对立角色但是我&#39我被困在这里。
/**
* Palindrome Word Checker
* Tests to see if an input phrase is a
* palindrome (read the same if read backward and forwards)
*/
import java.util.Scanner;
public class wordPalindrome {
public static void main(String[] args) {
Scanner scanner = new Scanner(System. in );
System.out.println("Palindrome Word Checker\nEnter a phrase, please:");
String theWord = "";
while (true) {
theWord = scanner.nextLine();
System.out.println(theWord + ": " + wordPalindrome(theWord));
}
}
public static boolean wordPalindrome(String word) {
// SECONDLY, we check to see how we much of the word
// is left until verification. We check first to prevent
// array (out of bounds) exception errors.
if (word.length() == 0 || word.length() == 1) return true;
// FIRST we take the last letter and compare it to the first letter
// if it matches, then we move onward and return to the function
// with a new word. By substring(), we take off the first/last letters
// and we keep repeating this process until the length is
// at 0 or 1 for odd/even lengthed words to verify its status
if (word.charAt(word.length() - 1) == word.charAt(0))
return wordPalindrome(word.substring(1, word.length() - 1));
// if we fail to make an ID, then it's obviously
// not a palindrome and we return false
return false;
}
}
这是"字符串"他们用来破坏我的程序:pastebin。我如何承受那么长的弦?我显然不能使用String,因为它太长了......信息太多了。
答案 0 :(得分:1)
比递归更好的方法是迭代过程。您可以使用charAt
和一个循环来处理字符串的一半而另一半同时处理。我不会编码,但我会尝试使用伪代码。我建议用Java编写它作为对自己的挑战:
答案 1 :(得分:1)
您可能应该遵循hexafraction的建议并尝试自己编写代码。如果您对编码挑战感兴趣,例如您现在正在努力解决的问题,您还可以访问:
以防万一应该通过回文任务的解决方案:
public boolean isPalindrome(String s) {
s = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
int b = 0;
int e = s.length()-1;
while(b < e) {
if(s.charAt(b++) != s.charAt(e--))
return false;
}
return true;
}
答案 2 :(得分:0)
不要为此使用递归。
只需替换下面的
if (word.charAt(word.length() - 1) == word.charAt(0))
return wordPalindrome(word.substring(1, word.length() - 1));
用这个
int length = word.length();
for(int i = 0; i < length / 2; i++) {
if(word.charAt(i) != word.charAt(length - i - 1)){
return false; // not palindrome
}
}
return true; // palindrome
答案 3 :(得分:0)
也可以使用StringBuilder
:
StringBuilder sb = new StringBuilder();
sb.append(word);
return sb.equals(sb.reverse());
快速高效。
答案 4 :(得分:0)
使用 java.io 包。 然后你可以使用以下代码行:
StringBuffer str = new StringBuffer(theWord).reverse();
if (theWord.equals(str)) {
System.out.println("Palindrome");
}
else {
System.out.println("Not Palindrome");
}