917. 仅仅反转字母

 

 

 

 

思路:
双指针,就是反转字符串的思路,不过加了层非字母的判断。详见注释。
注:遇到非字母字符移动指针后不能忽略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"))

 

 
posted @ 2020-04-14 14:37  人间烟火地三鲜  阅读(213)  评论(0)    收藏  举报