题目
给你一个字符串 s ,根据下述规则反转字符串:
所有非英文字母保留在原有位置。
所有英文字母(小写或大写)位置反转。
返回反转后的 s 。
示例1
输入:s = “ab-cd”
输出:“dc-ba”
示例2
输入:s = “Test1ng-Leet=code-Q!”
输出:“Qedo1ct-eeLg=ntse-T!”
解题思路
反转,我想到的是双指针,一个指向头,一个指向尾,然后分别判断是否为字母,当同时为字母的时候,交换。
本题中新学到的俩个方法:
1,Character.isLetter
isLetter() 方法用于判断指定字符是否为字母。
语法:boolean isLetter(char ch)
参数,ch – 要测试的字符。
返回值,如果字符为字母,则返回 true;否则返回 false
2,String.valueOf()
String.valueOf(char[] data) : 将 char 数组 data 转换成字符串
代码
public String reverseOnlyLetters(String s) {
int n=s.length();
char[]ans=s.toCharArray();//将字符串转换成字符数组的形式。
for(int i=0,j=n-1;i<j;){
while(i<j&&!Character.isLetter(ans[i]))
i++;
while(i<j&&!Character.isLetter(ans[j]))
j--;
if(i<j){
char temp=ans[i];
ans[i]=ans[j];
ans[j]=temp;
i++;
j--;
}
}
return String.valueOf(ans);
}