public static boolean isPalindrome(String string) { for (int forward = 0, backward = string.length() - 1; forward < string .length(); forward++, backward--) if (string.charAt(forward) != string.charAt(backward)) return false; return true; }
另一种方法,性能好一些,但可读性差一些,如下:
public static boolean isPalindrome(String string) { if (string.length() == 0) return true; int limit = string.length() / 2; for (int forward = 0, backward = string.length() - 1; forward < limit; forward++, backward--) if (string.charAt(forward) != string.charAt(backward)) return false; return true; }
看一下agile java一书其中的一段话,值得思考:
引用
"While normally you shouldn't worry about performance until it is a problem, an algorithm should be clean. Doing something unnecessarily in an algorithm demonstrates poor understanding of the problem. It can also confuse future developers"
下面是测试的代码:
public void testPalindrome() { assertFalse(isPalindrome("abcdef")); assertFalse(isPalindrome("abccda")); assertTrue(isPalindrome("abccba")); assertFalse(isPalindrome("abcxba")); assertTrue(isPalindrome("a")); assertTrue(isPalindrome("aa")); assertFalse(isPalindrome("ab")); assertTrue(isPalindrome("")); assertTrue(isPalindrome("aaa")); assertTrue(isPalindrome("aba")); assertTrue(isPalindrome("abbba")); assertTrue(isPalindrome("abba")); assertFalse(isPalindrome("abbaa")); assertFalse(isPalindrome("abcda")); }