题目
给定一个字符串 S
,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
输入: "ab-cd"
输出: "dc-ba"
复制代码
输入: "a-bC-dEf-ghIj"
输出: "j-Ih-gfE-dCba"
复制代码
输入: "Test1ng-Leet=code-Q!"
输出: "Qedo1ct-eeLg=ntse-T!"
复制代码
S.length <= 100
33 <= S[i].ASCIIcode <= 122
S
中不包含 \
or "
要将字符串进行翻转操作,同时字符串中除了字母部分,其余字符均保留在原地。那么我们就不能直接交换首尾两处的元素,得加多一层判断,跳过非字母部分,再进行交换。
left, right
首尾两个指针;Character.isLetter(char c)
)。class Solution {
public String reverseOnlyLetters(String s) {
// 转换成数组
char[] sChar = s.toCharArray();
// 定义指针
int left = 0, right = sChar.length - 1;
// 遍历数组
while(left < right){
// 左边跳过非字母部分
while(left < right && !Character.isLetter(sChar[left])){
++left;
}
// 右边跳过非字母部分
while(left < right && !Character.isLetter(sChar[right])){
--right;
}
// 交换元素
char c = sChar[left];
sChar[left++] = sChar[right];
sChar[right--] = c;
}
// 将字节数组从新转化成字符串并返回
return new String(sChar);
}
}
复制代码
复杂度分析
文章有写的不好的地方,请大佬们不吝赐教,错误是最能让人成长的,愿我与大佬间的距离逐渐缩短!
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。