检查一个字符串是否是回文不是
我非常接近完成我的一个练习问题,它处理一个回文和一个字符串参数,我坚持使用调用该方法的主要方法。每次我编译我的代码时,它都会编译,但是当我输入数据时,它会继续运行,并且不会给我一个结果。任何人都可以在我需要做的事情中帮助我获得结果?问题只是要创建一个方法来检查它是否是回文,我测试它的主要方法是给我带来麻烦。检查一个字符串是否是回文不是
这是我的代码:
import java.util.*;
public class TestisPalindrome
{
public static boolean isPalindrome(String str) {
int left = 0;
int right = str.length() -1;
while(left < right) {
if(str.charAt(left) != str.charAt(right)) {
return false;
}
}
left ++;
right --;
return true;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter a string to see if it is a palindrome or not: ");
String st1 = scan.nextLine();
System.out.println(isPalindrome(st1));
}
}
右&左增量应该在while
环
while(left < right)
{
if(str.charAt(left) != str.charAt(right))
{
return false;
}
left ++;
right --;
}
哇。巨大的facepalm。十分感谢你的帮助!!我解决了它。 – user2045470 2013-03-27 04:31:38
@ user2045470 ay89的回答很好,但你为什么不把'if'条件放在一边。像:while(str.charAt(left)!= str.charAt(right))'并且如果内部循环也会在while后面返回。 – 2013-03-27 04:33:19
你这个得太多。看看StringBuffer
:
StringBuffer input = new StringBuffer(str);
return str.equals(input.reverse()).toString);
请注意,您的实现的性能的影响:
while(left < right) { //multiply inner operations by n/2
if(str.charAt(left) != str.charAt(right)) { //three operations
return false;
}
//This need to be inside your while loop
left ++; //one operation
right --; //one operation
}
这就导致了一个O(n) = (n * 5)/2
。另一方面,如果您只是反转一个字符串,则在最坏的情况下,它只是O(n) = n
。这是而不是会产生重大影响,但可以根据您如何访问这些信息加起来。
您创建了一个无限循环。你有一个while循环,但从不改变条件。
while(left < right)
{
if(str.charAt(left) != str.charAt(right))
{
return false;
}
}
假设左边<正确,当你开始,这将永远不会改变。
你有行左右增加的行,但是你的代码永远不会到达那些行,因为它永远不会出现while循环。
您也可以解决这个问题是这样的:
public static boolean isPalindrome (String str){
String convertedStr = "";
for (int i = 0; i <str.length(); i++){
if (Character.isLetterOrDigit(str.charAt(i)))
convertedStr += Character.toLowerCase(str.charAt(i));
}
if (convertedStr.equals(reverseString(convertedStr)))
return true;
else
return false;
} //End of isPalindrome
这里是我用来判断一个字符串是否是回文字符串或不代码:
private static boolean isPalindromeString(String str){
if (str == null)
return false;
int len = str.length();
for (int i=0; i<len/2 ; i++){
if (str.charAt(i) != str.charAt(len - i - 1)){
return false;
}
}
return true;
}
我希望这可以帮助你。
看看这个链接> [Java程序来检查字符串是不是回文](http://www.msccomputerscience.com/2014/05/java-program-to-check-whether-string-is.html ) – ARJUN 2014-11-03 12:39:22