鱼C论坛

 找回密码
 立即注册
查看: 2016|回复: 3

[已解决]为什么不对

[复制链接]
发表于 2023-10-1 17:18:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
class Solution(object):
def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        import re
        s = s.lower()
        result = str(re.match(r"[a-z]",s))
        if result[::-1] == result:
            return True
        else:
            return False
为什么不对
最佳答案
2023-10-1 17:18:15
问题在于使用了 re.match() 方法,该方法只匹配字符串的开头。因此,如果字符串的第一个字符不是字母,则 result 将为 None ,无法进行字符串翻转比较,导致程序出错。应该使用 re.sub() 方法替换非字母数字字符。以下是修改后的代码:
class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        import re
        s = re.sub(r'[^a-zA-Z0-9]', '', s).lower()
        return s == s[::-1]

此代码将所有非字母数字字符替换为空字符串,并将字符串转换为小写字母,然后将其与反向字符串进行比较,以确定是否为回文字符串。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-1 17:18:15 | 显示全部楼层    本楼为最佳答案   
问题在于使用了 re.match() 方法,该方法只匹配字符串的开头。因此,如果字符串的第一个字符不是字母,则 result 将为 None ,无法进行字符串翻转比较,导致程序出错。应该使用 re.sub() 方法替换非字母数字字符。以下是修改后的代码:
class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        import re
        s = re.sub(r'[^a-zA-Z0-9]', '', s).lower()
        return s == s[::-1]

此代码将所有非字母数字字符替换为空字符串,并将字符串转换为小写字母,然后将其与反向字符串进行比较,以确定是否为回文字符串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-1 17:19:10 | 显示全部楼层
为什么不对

你提供的代码存在一些问题,在判断回文串的逻辑上有误。

1. 首先,请注意代码缩进,在 Python 中缩进是非常重要的。代码段的缩进应该是统一的,一般使用四个空格来表示缩进。

2. 在使用正则表达式进行匹配时,re.match() 函数只会在字符串开头进行匹配,而不是匹配整个字符串。此处应该使用 re.search() 函数进行匹配。

3. 变量 result 的赋值逻辑有误。由于使用了 re.match() 函数,返回的是一个 Match 对象,而不是匹配到的字符串。因此,比较 result[::-1]result 是不正确的。

4. 即使修复了上述问题,你的代码其实并没有完成正确的回文串判断逻辑。你只是将字母转换为小写,并对第一个字母进行匹配判断,而没有移除非字母数字字符。

下面是修复后的代码:
class Solution(object):    def isPalindrome(self, s):        """        :type s: str        :rtype: bool        """        import re        s = re.sub(r'[^a-zA-Z0-9]', '', s)  # 移除非字母数字字符        s = s.lower()  # 将所有大写字母转换为小写                return s == s[::-1]  # 比较短语正着读和反着读是否相等
修复后的代码使用了 re.sub() 函数来移除非字母数字字符,并使用 s == s[::-1] 来判断短语是否是回文串。

希望可以帮到你,如果有任何问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-1 17:20:05 | 显示全部楼层
这段代码存在一些问题导致结果不正确。以下是修复后的代码:
import re

class Solution(object):
    def isPalindrome(self, s):
        """判断字符串是否为回文串"""
        # 将字符串转换为小写字母并移除非字母数字字符
        s = re.sub(r'[^a-zA-Z0-9]', '', s.lower())
        
        # 判断翻转后的字符串是否与原字符串相同
        if s == s[::-1]:
            return True
        else:
            return False

修正点如下:

1. 在引入 re 模块后,应该使用 re.search 方法而不是 re.match 方法来匹配字符串。而且在进行字符串匹配时,应该传入处理后的小写字符串 s,而不是原始字符串。

2. 在判断是否为回文串时,应该将处理后的字符串 s 与其翻转后的字符串进行比较,而不是与 result 进行比较。

修复后的代码会先将输入字符串转换为小写字母并去除非字母数字字符,然后判断处理后的字符串是否与翻转后的字符串相等,从而确定是否为回文串。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 10:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表