📌  相关文章
📜  国际空间研究组织 | ISRO CS 2007 |问题 28(1)

📅  最后修改于: 2023-12-03 14:50:45.867000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2007 |问题 28

这是一道算法题,要求编写一个程序来判断一个给定的字符串是否为回文字符串。回文字符串的定义是从前往后和从后往前读都是一样的字符串。

算法思路

可以通过双指针的方式来判断一个字符串是否为回文字符串。定义两个指针i和j,分别指向字符串的首尾位置。每次比较i位置和j位置的字符是否相等,如果不相等则说明字符串不是回文字符串,如果一直比较到i>=j,那么说明字符串是回文字符串。

代码实现

可以使用Python或Java等语言来实现判断回文字符串的算法。下面分别给出Python和Java的实现代码。

Python
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
Java
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)。算法的时间复杂度为线性的,因此在实际应用中具有较好的执行效率。同时,空间复杂度为常数级别,不会占用太多的内存空间。