题目描述:
给定一个字符串 S
,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
示例 1:
输入:"ab-cd"
输出:"dc-ba"
示例 2:
输入:"a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"
示例 3:
输入:"Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"
解题思路:
- 先找出所有字母字符,组成一个字母字符串
- 反转字母字符串
- 从前往后依次用字符字符串中的字符替换原字符串中的字母。
代码实现:
class Solution {
public String reverseOnlyLetters(String S) {
if (S == null) {
return S;
}
//取得所有为字母的字符,组成一个字母字符串
StringBuffer str = new StringBuffer("");
for (int i = 0; i < S.length(); i++) {
char val = S.charAt(i);
if ((val >= 'a' && val <= 'z') || (val >= 'A' && val <= 'Z')) {
str.append(val);
}
}
//反转字母字符串
str.reverse();
StringBuffer s1 = new StringBuffer(S);
//用反转后的字母字符串中的字符替换原字符串中的字母
int k = 0;
for (int i = 0; i < s1.length(); i++) {
char val = s1.charAt(i);
if ((val >= 'a' && val <= 'z') || (val >= 'A' && val <= 'Z')) {
String value = "" + str.charAt(k);
s1.replace(i,i+1,value);
k++;
}
}
return s1.toString();
}
}