仅仅反转字母
题目描述
仅仅反转字母
思路
双指针
left和right指针分别从左往右和从右往左遍历,如果都扫描到字母且left<right,则交换s[left]和s[right],继续遍历;否则反转结束,返回字符串。
Java实现
class Solution {
public String reverseOnlyLetters(String s) {
int n = s.length();
char[] arr = s.toCharArray();
int left = 0, right = n-1;
while (true) {
while (left < right && !Character.isLetter(s.charAt(left))) {
left ++;
}
while (left < right && !Character.isLetter(s.charAt(right))) {
right --;
}
if (left >= right) {
break;
}
swap(arr, left, right);
left ++;
right --;
}
return new String(arr);
}
private void swap(char[] arr, int left, int right) {
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
Python实现
class Solution:
def reverseOnlyLetters(self, s: str) -> str:
ans = list(s)
n = len(ans)
left, right = 0, n-1
while True:
while left < right and not ans[left].isalpha():
left += 1
while left < right and not ans[right].isalpha():
right -= 1
if left >= right:
break
ans[left], ans[right] = ans[right], ans[left]
left += 1
right -= 1
return ''.join(ans)