有趣而简单的两段代码
[code] 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;
}[/code]
另一种方法,性能好一些,但可读性差一些,如下:
[code] 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;
}[/code]
看一下agile java一书其中的一段话,值得思考:[quote]"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"[/quote]
下面是测试的代码:
[code]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"));
}[/code]