题目:
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
原题链接:https://leetcode.cn/problems/reverse-words-in-a-string-iii
示例 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 中的所有单词都用一个空格隔开。
java快慢指针解法:
class Solution {
public String reverseWords(String s) {
int fast = 0, slow = 0;
StringBuilder result = new StringBuilder();
while (fast < s.length()) {
// 快指针遇到空格时,让满指针指向快指针指向的位置
if (s.charAt(fast) == ' ') {
result.append(reverseWord(s.substring(slow, fast).trim())).append(" ");
slow = fast;
}
// 快指针达到字符串末尾时,需要substring需要fast+1,否则匹配不到最后一个字符
if (fast == s.length() - 1) {
result.append(reverseWord(s.substring(slow, fast + 1).trim()));
}
fast++;
}
return result.toString().trim();
}
private String reverseWord(String s){
return new StringBuffer(s).reverse().toString();
}
}
python解法:
class Solution:
def reverseWords(self, s: str) -> str:
return " ".join([i[::-1] for i in s.split(" ")])