题目
代码部分一(15ms)
class Solution {
public String reverseOnlyLetters(String S) {
int n = 0;
String res = "";
Map<Integer, String> map = new HashMap<>();
int len = S.length();
for(int i = 0; i < len; i++){
char temp = S.charAt(i);
if(temp < 'A' || temp > 'z' || temp < 'a' && temp > 'Z')
map.put(i, temp + "");
}
for(int i = len - 1; i >= 0; i--){
char temp = S.charAt(i);
while(map.containsKey(n))
n++;
if(temp >= 'A' && temp <= 'Z' || temp >= 'a' && temp <='z'){
map.put(n++, temp+ "");
}
}
for(int j = 0; j < len; j++){
res += map.get(j);
}
return res;
}
}
代码部分二(9ms)
class Solution {
public String reverseOnlyLetters(String S) {
char[] ch = S.toCharArray();
int l = 0;
int r = ch.length - 1;
while(l < r){
while(l < r && !Character.isLetter(ch[l])) l++;
while(l < r && !Character.isLetter(ch[r])) r--;
if(l >= r) break;
char temp = ch[l];
ch[l++] = ch[r];
ch[r--] = temp;
}
return new String(ch);
}
}