鱼C论坛

 找回密码
 立即注册
查看: 1096|回复: 7

[已解决]python 字符串切片操作的疑惑

[复制链接]
发表于 2020-8-5 21:48:20 | 显示全部楼层 |阅读模式

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

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

x
Leecode上一道题要求字符串s的最长回文子串,我用的切片做的。但在实现的过程中, a = s[i:i + j]       这样没有任何输出(包括空格,任何符号),
                                                                                                                            b = s[i:i + j:-1]
                                                                                                                                  if a == b:
                                                                                                                              print(a)
而a = s[i:i + j] 输出了所有回文子串。这两段代码不是一样的吗?
   if a == a[::-1]:
           print(a)

ps:代码没能实现题目要求的最长字符串,for循环也有问题,大佬别笑我,萌新给跪了

有问题的代码:
class Solution:
    def longestPalindrome(self, s: str) -> str:
        length = len(s)
        for i in range(0,length):
            for j in range(i+1,length):
                a = s[i:i + j]
                b = s[i:i + j:-1]
                if a == b:
                    print(a)
最佳答案
2020-8-5 22:10:56
本帖最后由 全能小乌贼 于 2020-8-5 22:28 编辑

这个是不一样的, 对于这个最长回文字符串算法问题我不做深入解释,还请自行百度。
但是这个切片的问题是你的语法表达不恰当, b = s[i:i + j:-1]这个语句的意思是说,以第i个元素起始,第i+j个元素结束,但是最后一个-1表示角标值每次-1,比如从3开始,到5结束,然后角标每次-1,从3开始-1,是永远也不能够到达5的,所以不会有值输出出来,因此第三个参数你可以理解为步长。但是 a[::-1]表示的也是每次步长值-1,但是因为它使用的是::,这个符号表示取所有值,因此会自动默认为从最大的值开始每次-1到第一个值结束,比如从5开始到3结束,它会自动选择合适的起始和结束的值。因为第一个你指定了起始和结束的值但是因为步长给的有问题所以不能够输出。从而导致进一步if a==b语句失效,所以什么都输出不出来。逻辑上可能有些难理解,你可以试试下面的代码帮助你理解一下。
s = "abcdef"
b = s[0: 6: -1] #第三个参数表示的是间隔取法
c = s[0: 6: 2]
a = s[::-1]
print(b)        # 这个不会有输出
print(a)        # 这个才有输出
print(c)        # 从第一个元素开始,隔一个元素输出


如果不懂可以继续提问,如果解答了你的问题,还请给个好评,谢谢!

有问题代码没有输出

有问题代码没有输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 21:56:58 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-8-5 22:08 编辑

这个代码可以解答这道题。
class Solution:
    def longestPalindrome(self, s: str) -> str:
        length = len(s)
        result = ''

        for i in range(0, length):
            for j in range(i + 1, length + 1):
                a = s[i : j]
                if a == a[::-1] and j - i > len(result):
                    result = a

        return result
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 22:10:56 | 显示全部楼层    本楼为最佳答案   
本帖最后由 全能小乌贼 于 2020-8-5 22:28 编辑

这个是不一样的, 对于这个最长回文字符串算法问题我不做深入解释,还请自行百度。
但是这个切片的问题是你的语法表达不恰当, b = s[i:i + j:-1]这个语句的意思是说,以第i个元素起始,第i+j个元素结束,但是最后一个-1表示角标值每次-1,比如从3开始,到5结束,然后角标每次-1,从3开始-1,是永远也不能够到达5的,所以不会有值输出出来,因此第三个参数你可以理解为步长。但是 a[::-1]表示的也是每次步长值-1,但是因为它使用的是::,这个符号表示取所有值,因此会自动默认为从最大的值开始每次-1到第一个值结束,比如从5开始到3结束,它会自动选择合适的起始和结束的值。因为第一个你指定了起始和结束的值但是因为步长给的有问题所以不能够输出。从而导致进一步if a==b语句失效,所以什么都输出不出来。逻辑上可能有些难理解,你可以试试下面的代码帮助你理解一下。
s = "abcdef"
b = s[0: 6: -1] #第三个参数表示的是间隔取法
c = s[0: 6: 2]
a = s[::-1]
print(b)        # 这个不会有输出
print(a)        # 这个才有输出
print(c)        # 从第一个元素开始,隔一个元素输出


如果不懂可以继续提问,如果解答了你的问题,还请给个好评,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-5 22:11:04 | 显示全部楼层
本帖最后由 Twilight6 于 2020-8-5 22:16 编辑

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

使用道具 举报

发表于 2020-8-5 22:16:19 | 显示全部楼层
qiuyouzhi 发表于 2020-8-5 22:11
首先,你的headers只有user-agent加的是有效的,其他的都是废的。
其次,urllib.requests.urlopen()的参数 ...

串台了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 22:37:53 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-8-5 21:56
这个代码可以解答这道题。

谢谢解答,b = s[i + j - 1 : i - 1 : -1]我想清楚了,但是i + j > len(result)我没想明白,应该不是判断最长回文子串的吧?像"dbababa"得出的就是aba
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 22:41:34 | 显示全部楼层
本帖最后由 全能小乌贼 于 2020-8-5 22:43 编辑
李万金 发表于 2020-8-5 22:37
谢谢解答,b = s我想清楚了,但是i + j > len(result)我没想明白,应该不是判断最长回文子串的吧?像"dba ...


回文字符串这种问题你可以去CSDN上看,肯定有人已经解答过了,你这里问的问题也只是属于切片问题
最长回文字符串:https://blog.csdn.net/weixin_40449300/article/details/82318849
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-6 08:53:23 | 显示全部楼层
李万金 发表于 2020-8-5 22:37
谢谢解答,b = s我想清楚了,但是i + j > len(result)我没想明白,应该不是判断最长回文子串的吧?像"dba ...

i + j > len(result) 是判断最长的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 17:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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