给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
该题目来自力扣题库
示例
示例 1:
输入:“ab-cd”
输出:“dc-ba”
示例 2:
输入:“a-bC-dEf-ghIj”
输出:“j-Ih-gfE-dCba”
示例 3:
输入:“Test1ng-Leet=code-Q!”
输出:“Qedo1ct-eeLg=ntse-T!”
思路
先把输入的字符串转换成字符数组,之后运用双指针(一个指前left,一个指后right)。
if(left指的内容不是字母)则left++
else if(right所指的内容不是字母)则right–
else//这个就是left和right指的都是字母的情况
交换left和right所指的内容
最后把字符数组转换成字符串之后返回
代码
class Solution {
public String reverseOnlyLetters(String S) {
char[] s=S.toCharArray();
int left=0;
int right=s.length-1;
while(left<=right){
if(!Character.isLetter(s[left])){
left++;
}else if(!Character.isLetter(s[right])){
right--;
}else{
char temp='0';
temp=s[left];
s[left]=s[right];
s[right]=temp;
left++;
right--;
}
}
S=String.valueOf(s);
return S;
}
}
总结
Java中有很多好用的方法
1.把字符串转换成字符数组型
String S="abcdef"
char[] s=S.toCharArray();
2.判断字符是否是字母,数字
char c='a';
Character.isLetter(c);
//如果是字母返回true,如果不是字母返回false
Character.isDigit(c);
//如果是数字返回true,如果不是数字返回false
Character.isLowerCase(c);
//如果是小写字母返回true,如果不是小写字母返回false
Character.isUpperCase(c);
//如果是大写字母返回true,如果不是大写字母返回false
Character.isLetterOrDigit(c);
//如果是字母或者数字返回true,如果不是字母或者数字返回false
3.将字符数组转化成字符串
char[] s={'a','b','c','d'};
String S=String.valueOf(s);
//最后S字符串是"abcd"
4.charAt()方法
String s="abcd"
system.out.print(s.charAt(2));
//输出的是c
要注意的是charAt()方法返回的是字符串自定索引处的char值,charAt方法不是改变String的值。