思路:
双指针,就是反转字符串的思路,不过加了层非字母的判断。详见注释。
注:遇到非字母字符移动指针后不能忽略continue,因为不确定下一个字符就是字母。
1 class Solution(object): 2 def reverseOnlyLetters(self, S): 3 """ 4 :type S: str 5 :rtype: str 6 """ 7 # 转成list,字符串是不可变类型 8 lists = list(S) 9 # 双指针 10 i, j = 0, len(lists) - 1 11 while i < j: 12 # 遇到非字母字符,仅移动指针 13 if i < j and not lists[i].isalpha(): 14 i += 1 15 continue 16 if i < j and not lists[j].isalpha(): 17 j -= 1 18 continue 19 # 遇到字母,反转,再移动指针 20 lists[i], lists[j] = lists[j], lists[i] 21 i += 1 22 j -= 1 23 return "".join(lists) 24 25 26 if __name__ == '__main__': 27 solution = Solution() 28 print(solution.reverseOnlyLetters("a-bC-dEf-ghIj"))