有趣而简单的两段代码

假如你想写一个小程序,保证字符串首尾两个字符是一样的,你可以如下实现:

[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]

THE END
< <上一篇
下一篇>>