难道是 s[3:-1:-1]等价于 s[3:4:-1]?所以结果为''?
关联的 LeetCode problem: Valid Palindrome II - LeetCode。
我的出现错误的 solution 。
class Solution:
def validPalindrome(self, s: str) -> bool:
l, r = 0, len(s) - 1
while l < r:
if s[l] != s[r]:
return s[l + 1:r + 1] == s[r:l:-1] or s[l:r] == s[r - 1:l - 1:-1]
l += 1
r -= 1
return True
Bing AI的回复有点帮助。
相关的链接:python - Understanding negative steps in list slicing - Stack Overflow
1
luozic 2023-06-24 20:22:15 +08:00
|
2
luozic 2023-06-24 20:23:06 +08:00 1
+---+---+---+---+---+---+
| P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 -6 -5 -4 -3 -2 -1 |
3
mkroen 2023-06-25 10:29:46 +08:00
s[3::-1]
|
4
JasonLaw OP @luozic #2 按照正常理解的话,我会觉得 s[3:-1:-1]的结果是'e'+'c'+'c'+'e',不包含'r',因为它是 stop index 所在的 char 。
|
5
JasonLaw OP @mkroen #3 我知道这样子可以,但是这样子我的代码就会变得复杂。我需要判断 stop 是否为-1 ,如果是-1 的话,就需要使用 s[3::-1]替代 s[3:-1:-1]。
|
6
zizon 2023-06-25 11:08:09 +08:00
s[3:-1:-1]
-> s[3:4:-1] -> s[4:3:1] -> s[4:3] , 4 > 3 |
7
evemoo 2023-06-25 11:20:50 +08:00
左闭右开 + 切片的顺序 = 答案
|