给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
示例 1:
输入:"ab-cd"
输出:"dc-ba"
示例 2:
输入:"a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"
示例 3:
输入:"Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"
提示:
S.length <= 10033 <= S[i].ASCIIcode <= 122S中不包含\or"
===============================================================
思路:把字母拿出来反转,再遍历原字符串,碰到字母用反转后的数组,碰到非字母用原数组
===============================================================
class Solution {
public String reverseOnlyLetters(String S) {
char[] chars = S.toCharArray();
char[] zm = new char[S.length()];
int j=0;
for (int i = chars.length-1; i > -1; i--) {
if ((chars[i]<=90&&chars[i]>=65)||(chars[i]<=122&&chars[i]>=97)){
zm[j]=chars[i];
j++;
}
}
j=0;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
if ((chars[i]<=90&&chars[i]>=65)||(chars[i]<=122&&chars[i]>=97)){
builder.append(zm[j]);
j++;
}else {
builder.append(chars[i]);
}
}
return builder.toString();
}
}
本文介绍了一种算法,该算法能够反转字符串中的字母部分,同时保持非字母字符在原位置不变。通过示例展示了如何实现这一功能,包括处理复杂字符串的情况。
3013

被折叠的 条评论
为什么被折叠?



