题目描述
给定一个字符串 S
,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
示例
输入:"ab-cd!" 输出:"dc-ba!"
思路
S.charAt(i)表示字符串S从左开始的字符,S.charAt(j)表示字符串S从右开始的字符
创建一个StringBuffer对象ch
情况1:如果左边的字符是字母
- ①右边的字符也是字母,那么将右边的字母拼接到ch中;
- ②右边的字符不是字母,那么j--,找到一个字母拼接到ch中,j--
情况2:左边的字符不是字母
- 直接将左边的字符拼接到ch中
代码
class Solution {
public String reverseOnlyLetters(String S) {
StringBuffer ch=new StringBuffer();
int j=S.length()-1;
for(int i=0;i<S.length();i++){
if(Character.isLetter(S.charAt(i))){
while(!Character.isLetter(S.charAt(j))){
j--;
}
ch.append(S.charAt(j));
j--;
}else{
ch.append(S.charAt(i));
}
}
return ch.toString();
}
}
注意:判断是否为字母,Character.isLetter(XX),拼接XX.append(YY)