已解答
简单
相关标签
相关企业
提示
给你一个字符串 s
,根据下述规则反转字符串:
- 所有非英文字母保留在原有位置。
- 所有英文字母(小写或大写)位置反转。
返回反转后的 s
。
示例 1:
输入:s = "ab-cd" 输出:"dc-ba"
示例 2:
输入:s = "a-bC-dEf-ghIj" 输出:"j-Ih-gfE-dCba"
示例 3:
输入:s = "Test1ng-Leet=code-Q!" 输出:"Qedo1ct-eeLg=ntse-T!"
提示
1 <= s.length <= 100
s
仅由 ASCII 值在范围[33, 122]
的字符组成s
不含'\"'
或'\\'
参考代码:
class Solution(object):
def reverseOnlyLetters(self, s):
"""
:type s: str
:rtype: str
"""
list1=list(s)
i=0
j=len(s)-1
while i<j:
if s[i].isalpha() and s[j].isalpha():
list1[i],list1[j]=list1[j],list1[i]
i+=1
j-=1
if not list1[i].isalpha():
i+=1
if not list1[j].isalpha():
j-=1
return ''.join(list1)
在 Python 中不能使用'A' <= i <= 'z'
来判断一个字符是不是字母。
虽然这种方式在一些其他编程语言中可能可行,但在 Python 中,这样的表达式会按照从左到右的顺序分别判断'A' <= i
和i <= 'z'
,这两个条件分别会产生True
或False
的布尔值结果,然后再对这两个布尔值进行比较,而不是像预期的那样判断字符是否在字母范围内。
例如,如果i
的值为数字字符'5'
,首先'A' <= '5'
为False
,'5' <= 'z'
也为False
,但False <= False
这个比较结果是True
,从而产生错误的判断。
所以,应该使用如i.isalpha()
这样的内置方法来正确判断一个字符是否为字母。