题目给你一个字符串 s ,根据下述规则反转字符串:
所有非英文字母保留在原有位置。
所有英文字母(小写或大写)位置反转。
返回反转后的 s 。
方法一:双指针
c++
class Solution {
public:
string reverseOnlyLetters(string s) {
int n=s.size();
int left=0,right=n-1;
while(true){
while(left<right&&!isalpha(s[left])){
left++;
}
while(left<right&&!isalpha(s[right])){
right--;
}
if(left>=right)
break;
swap(s[left],s[right]);
left++;
right--;
}
return s;
}
};
java
class Solution {
public String reverseOnlyLetters(String s) {
char[] arr=s.toCharArray();
int left=0,right=s.length()-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);
}
public void swap(char[] arr, int left, int right) {
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}