判断一个字符串是否是回文串,在 Python 中是一个常见的任务。回文串是指正着读和反着读都相同的字符串。例如,“level”、“radar”、“妈妈”等都是回文串,而“hello”、“python”等则不是。本文将介绍几种判断回文串的方法,并给出相应的代码示例。

方法一:使用字符串切片

Python 提供了强大的字符串切片功能,我们可以利用这一特性轻松判断一个字符串是否是回文串。具体的方法是将字符串反转,然后与原字符串进行比较。

def is_palindrome(s):
    # 去掉空格并将字符串转为小写
    s = s.replace(" ", "").lower()
    # 反转字符串
    reversed_s = s[::-1]
    # 比较原字符串与反转后的字符串
    return s == reversed_s

# 示例
test_str = "A man a plan a canal Panama"
if is_palindrome(test_str):
    print(f'"{test_str}" 是回文串。')
else:
    print(f'"{test_str}" 不是回文串。')

在上述代码中,我们首先去掉了字符串中的空格,并将其转换为小写,以确保比较时不受大小写和空格的影响。使用 s[::-1] 实现了字符串的反转。最后,通过比较原字符串和反转后的字符串来判断是否为回文串。

方法二:使用双指针

另一种判断回文串的方法是使用双指针。我们可以使用两个变量,一个指向字符串的开头,另一个指向字符串的末尾,逐步向中间靠拢。

def is_palindrome(s):
    # 去掉空格并将字符串转为小写
    s = s.replace(" ", "").lower()
    left, right = 0, len(s) - 1

    while left < right:
        # 如果字符不相等,返回 False
        if s[left] != s[right]:
            return False
        # 移动两个指针
        left += 1
        right -= 1

    return True

# 示例
test_str = "Able was I ere I saw Elba"
if is_palindrome(test_str):
    print(f'"{test_str}" 是回文串。')
else:
    print(f'"{test_str}" 不是回文串。')

在这个方法中,我们维护两个指针 leftright。在每一次循环中,我们比较这两个指针所指的字符是否相等。如果不相等,就可以立即返回 False;如果相等,就继续向中间移动指针。直到两个指针相遇为止,如果在此过程中没有发现不相等的字符,便可以判断该字符串是回文串。

方法三:借助栈

栈(stack)是一种后进先出(LIFO)的数据结构,我们也可以利用栈来判断回文串。将字符串中的字符逐一入栈,然后出栈时与原序列进行比较。

def is_palindrome(s):
    # 去掉空格并将字符串转为小写
    s = s.replace(" ", "").lower()
    stack = []

    # 将字符入栈
    for char in s:
        stack.append(char)

    # 逐一比较出栈的字符和原字符
    for char in s:
        if char != stack.pop():
            return False
    return True

# 示例
test_str = "Was it a car or a cat I saw"
if is_palindrome(test_str):
    print(f'"{test_str}" 是回文串。')
else:
    print(f'"{test_str}" 不是回文串。')

在此方法中,我们将字符串的字符依次入栈,然后依次出栈并与原字符串中的字符进行比较。如果任何一个字符不匹配,则返回 False

总结

在 Python 中,我们可以使用字符串切片、双指针和栈等多种方法判断一个字符串是否是回文串。每种方法都有其优缺点,具体选择哪种取决于使用场景及个人习惯。通过以上示例,相信您可以根据需要实现回文字符串的判断。无论是学习 Python 语言还是进行字符串相关操作,掌握这些基本技巧都是非常有用的。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部