📅  最后修改于: 2023-12-03 14:50:45.867000             🧑  作者: Mango
这是一道算法题,要求编写一个程序来判断一个给定的字符串是否为回文字符串。回文字符串的定义是从前往后和从后往前读都是一样的字符串。
可以通过双指针的方式来判断一个字符串是否为回文字符串。定义两个指针i和j,分别指向字符串的首尾位置。每次比较i位置和j位置的字符是否相等,如果不相等则说明字符串不是回文字符串,如果一直比较到i>=j,那么说明字符串是回文字符串。
可以使用Python或Java等语言来实现判断回文字符串的算法。下面分别给出Python和Java的实现代码。
def isPalindrome(s: str) -> bool:
if not s:
return True
i, j = 0, len(s) - 1
while i < j:
if not s[i].isalnum():
i += 1
continue
if not s[j].isalnum():
j -= 1
continue
if s[i].lower() != s[j].lower():
return False
i += 1
j -= 1
return True
public boolean isPalindrome(String s) {
if (s == null) {
return true;
}
int i = 0, j = s.length() - 1;
while (i < j) {
if (!Character.isLetterOrDigit(s.charAt(i))) {
i++;
continue;
}
if (!Character.isLetterOrDigit(s.charAt(j))) {
j--;
continue;
}
if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j))) {
return false;
}
i++;
j--;
}
return true;
}
时间复杂度为O(n),空间复杂度为O(1)。算法的时间复杂度为线性的,因此在实际应用中具有较好的执行效率。同时,空间复杂度为常数级别,不会占用太多的内存空间。