本文共 981 字,大约阅读时间需要 3 分钟。
问题描述:编写一个函数,参数为一个字符串,其返回值是这个字符串是否回文(即正读和反读都一样)。
解决方法:
方法一:同时从字符串头尾开始向中间扫描,如果所有字符都一样,那么这个字符串就是回文的。
实现代码如下:
public static boolean isPalindrome(String str) { if (str == null || str.length() <= 0) return false; int i = 0; int j = str.length() - 1; while (i < j) { if (str.charAt(i) != str.charAt(j)) return false; i++; j--; } return true;}
此方法的时间复杂度为O(n),空间复杂度为O(1)。
方法二: 可先从中间开始,然后向两边扫描查看字符是否相等。实现代码如下:
public static boolean isPalindrome(String str) { if (str == null || str.length() <= 0) return false; int len = str.length(); int mid = ((len >> 1) - 1) >= 0 ? (len >> 1) - 1 : 0; int left = mid; int right = len - mid - 1; while (left >= 0) { if (str.charAt(left) != str.charAt(right)) return false; left--; right++; } return true;}此方法的时间复杂度为O(n),空间复杂度为O(1)。
完整代码:
转载地址:http://nptmi.baihongyu.com/