牛客网地址:https://www.nowcoder.com/practice/e297fdd8e9f543059b0b5f05f3a7f3b2?tpId=295&tqId=1089616&sourceUrl=%2Fexam%2Foj%3FquestionJobId%3D10%26subTabName%3Donline_coding_page

双指针BM88:

题目如下:

Python代码如下:

1)解法1(常规解法):

#
# @param str string字符串 待判断的字符串
# @return bool布尔型
#

class Solution1:
    def judge(self , str: str) -> bool:
        help_str = ""
        for i in range(len(str) - 1, -1, -1):
            help_str += str[i]
        return str == help_str


s = Solution()
a = s.judge("abaa")
b = s.judge("abcdefgfedcba")
print(a, b)

解题思路:

        1、用for循环,将字符串str翻转,得出新的字符串help_str;

        2、如果新的字符串help_str与原字符串str相同,则str是回文字符串,返回True;否则不是回文字符串,返回False。

2)解法2(双指针解法):

#
# @param str string字符串 待判断的字符串
# @return bool布尔型
#

class Solution:
    def judge(self , str: str) -> bool:
        left, right = 0, len(str) - 1
        while left <= right:
            if str[left] != str[right]:
                return False
            left = left + 1
            right = right - 1
        return True


s = Solution()
a = s.judge("abaa")
b = s.judge("abcdefgfedcba")
print(a, b)

解题思路:

        1、定义左、右两个指针left、right,分别初始化为0、字符串长度-1,从两侧向中间遍历比较;

        2、left指针向右移,right指针向左移,当left<=right时,执行循环,left>right时循环结束:判断字符串str的left位置和right位置的字符,如果不同,则不是回文字符串,返回False;如果相同,left向右移一位,right向左移一位,继续比较;

        3、循环结束仍未出现left位置和right位置的字符不一致的情况,说明是回文字符串,返回True。

如下图所示:

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐