回文卡住了

时间:2015-05-18 15:16:45

标签: java

回文是一个你可以向后阅读并拥有的字符串 相同的字符与原始字符串的顺序相同,如:“gig”。

我正在尝试在下面的代码中检查它,但它返回“false”,即使它应该是真的。为什么?

public class Palindrome {
    public static boolean PalindromeChecker(String s) {
        int sum = 0;
        StringBuffer revStr = new StringBuffer(s);
        revStr.reverse();

        for (int i = 0; i < s.length(); i++)
            for (int k = 0; k < revStr.length(); k++)
                if (s.charAt(i) == revStr.charAt(k)) {
                    sum++;
                }
                if (sum == s.length()) {
                    return true;
                } else {
                    return false;
                }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您需要撰写revStr = revStr.reverse();。目前您正在放弃reverse的返回。

然后使用.equals来比较原始和反向的相等性。

也许更有效的方法是在你正在尝试的.charAt方法的路线上,但首先要使用更简单的方法。

答案 1 :(得分:0)

这里不需要嵌套循环。通过

for (int i = 0; i < s.length(); i++)
        for (int k = 0; k < revStr.length(); k++) ...

您正在将s的第一个字母与revStr中的每个字母进行比较,然后将s的第二个字母与revStr中的每个字母进行比较等。请尝试使用单个循环:

public static boolean PalindromeChecker(String s) {
     int sum = 0;
     StringBuffer revStr = new StringBuffer(s);
     revStr.reverse();

     for (int i = 0; i < s.length(); i++)
          if (s.charAt(i) == revStr.charAt(k)) {
               sum++;
          }
     if (sum == s.length()) {
          return true;
     } else {
          return false;
     }
 }

答案 2 :(得分:0)

这是一个使用while循环的简单方法

public static void main(String[] args) {
    System.out.println(palindromeChecker("gig"));
    System.out.println(palindromeChecker("hello"));
    System.out.println(palindromeChecker("racecar"));
    System.out.println(palindromeChecker("12345678987654321"));
    System.out.println(palindromeChecker("palindromechecker"));
}

public static boolean palindromeChecker(String s) {
    int start = 0;
    int end = s.length() - 1;

    while (start < end) {
        if (s.charAt(start) != s.charAt(end)) {
            return false;
        }
        start++;
        end--;
    }
    return true;
}

结果:

true
false
true
true
false