问题描述:编写一个函数,参数为一个字符串,其返回值是这个字符串是否回文(即正读和反读都一样)。
解决方法:
方法一:同时从字符串头尾开始向中间扫描,如果所有字符都一样,那么这个字符串就是回文的。
实现代码如下:
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)。
完整代码:点击进入