isPalindrom(Strings)-判断字符串是否是回文字符串
回文字符串指的是从左往右读和从右往左读结果一样的字符串。判断字符串是否是回文字符串是一道经典的问题,在算法题、编程题中也经常出现。
解题思路:
判断一串字符串是否是回文字符串,可以将字符串分为两段:左半部分和右半部分。对于长度为偶数的字符串,左右两部分长度相等;对于长度为奇数的字符串,左半部分长度比右半部分多一个字符。我们可以利用指针或者栈来操作字符串,具体步骤如下:
步骤一、定义两个指针i和j,分别指向字符串的起始和末尾位置。
步骤二、循环比较i和j所对应的字符,如果相同则继续比较,如果不同则返回false,如果i等于j,则表示已经比较完整个字符串,可以返回true。
步骤三、当比较完后仍然没有返回false,则说明字符串是回文字符串。
关键代码:
public static boolean isPalindrom(String s) {
if (s == null || s.length() == 0) {
return true;
}
int i = 0, j = s.length() - 1;
while (i < j) {
if (s.charAt(i) != s.charAt(j)) {
return false;
}
i++;
j--;
}
return true;
}
代码解释:
第一行是对字符串是否为空或者长度为0的判断,如果是,则直接返回true。
接下来定义两个指针i和j,分别指向字符串的起始和末尾位置。
循环比较i和j所对应的字符,如果相同则继续比较,如果不同则返回false,如果i等于j,则表示已经比较完整个字符串,可以返回true。
当比较完后仍然没有返回false,则说明字符串是回文字符串。
测试样例:
测试样例一:
输入: "racecar"
输出: true
测试样例二:
输入: "Hello"
输出: false
时间复杂度分析:
该算法的时间复杂度是O(N),其中N是字符串的长度。由于要遍历字符串的一半,所以时间复杂度是线性的。
空间复杂度分析:
该算法的空间复杂度是O(1),只用到了常量级别的额外空间,所以空间复杂度是常数级别的。
总结:
本文中介绍了如何判断一个字符串是否是回文字符串。我们可以将字符串分为两段:左半部分和右半部分,利用指针或者栈来操作字符串,最终判断字符串是否是回文字符串。该算法可以实现时间复杂度O(N)、空间复杂度O(1)的优秀性能。
