已解答
简单
相关标签
相关企业
提示
给你一个字符串 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 <= 100s仅由 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()这样的内置方法来正确判断一个字符是否为字母。



















