题目描述
给定一个字符来,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例1:
输入: s= “Let’s take Leetcode contest”
输出: “s’teL ekat edocteeL tsetnoc”
注意: 在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
思路分析
难度是简单 ,我们需要对输入字符串进行至少一次的遍历,来完成一下功能:
- 根据空字符来分片,每一片为一个单词;
- 将每个单词取反,单词相对位置不变,返回新的字符串;
这里我们通过String.split()
方法来实现步骤1 空字符分词;单个取反采用下标遍历,这里直接给出代码有:
解题代码
public static String solution(String s) {
if (s == null || s.length() < 2) {
return s;
}
StringBuilder res = new StringBuilder();
for(String str : s.split(" ")){
int i = str.length() - 1;
while(i >= 0)
res.append(str.charAt(i--));
res.append(' ');
}
return res.toString().trim();
}
复杂度分析
这里我们设n
为输入字符串的长度;
时间复杂度: 我们对字符串进行了一次遍历,故时间复杂度为O(n)
;
空间复杂度: 借助辅助容器 res
,故空间复杂度为O(n)
;
Github源码
完整可运行文件请访问GitHub。