Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
示例 2:
输入: s = "God Ding"
输出:"doG gniD"
提示:
1 <= s.length <= 5 * 104
s 包含可打印的 ASCII 字符。
s 不包含任何开头或结尾空格。
s 里 至少 有一个词。
s 中的所有单词都用一个空格隔开。
复制代码
二、思路分析:
分析题目,注意点如下:
1.反转单词中字母顺序
2.保持原有单词顺序和空格
3.至少 有一个词
根据题目分析, 使用额外的空间,将字符串放入数组中,遍历原有字符串,根据空格把字符串拆分成多个单词的字符串,我们只关心空格字符和最后一个字符,于是,遇到正常的字母字符一概不管;当找到空格时就找到了一个单词, 并将单词的字符串进行反转,然后继续找到下一个单词,最后 将反转的单词字符串拼接起来就是最终答案。
三、AC 代码:
class Solution {
public String reverseWords(String s) {
char[] chars = s.toCharArray();
int left = 0;
for (int i = 0; i < s.length(); i++) {
char currentChar = s.charAt(i);
if (currentChar == ' ') {
reverse(chars, left, i - 1);
left = i + 1;
} else if (i == s.length() - 1) {
reverse(chars, left, i);
}
}
return String.valueOf(chars);
}
private static void reverse(char[] chars, int start, int end) {
while (start < end) {
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
end --;
start ++;
}
}
}
复制代码
四、总结:
执行结果通过了,但是看内存和执行用时并不是很高,应该还有很多更好的思路,可以多去看看大佬们的题解扩充下思路。
写题解不易,若对你有帮助,点赞评论再走吧。ヽ(✿゚▽゚)ノ
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END