Title:Reverse Words in a String III 557
Difficulty:Easy
原题leetcode地址:https://leetcode.com/problems/reverse-words-in-a-string-iii/
1. 注解见代码注释
时间复杂度:O(n^2),嵌套循环。
空间复杂度:O(n),申请额外空间List。
/**
* 不能使用split()方法,将每个单词的起始位置分别存入List中,然后对每个单词进行Reverse
* @param s
* @return
*/
public static String reverseWords(String s) {
if (s.length() <= 0) {
return s;
}
List<Integer> startList = new ArrayList<>();
List<Integer> endList = new ArrayList<>();
for (int i = 0; i < s.length() - 1; i++) {
if (i == 0 && s.charAt(i) != ' ') {
startList.add(i);
}
if (s.charAt(i) == ' ' && s.charAt(i + 1) != ' ') {
startList.add(i + 1);
}
}
for (int i = 1; i < s.length(); i++) {
if (i == s.length() - 1 && s.charAt(i) != ' ') {
endList.add(i);
}
if (s.charAt(i) == ' ' && s.charAt(i - 1) != ' ') {
endList.add(i - 1);
}
}
char cS[] = s.toCharArray();
for (int i = 0; i < startList.size(); i++) {
int n = startList.get(i);
int m = endList.get(i);
while (n < m) {
char tmp = cS[n];
cS[n] = cS[m];
cS[m] = tmp;
n++;
m--;
}
}
return new String(cS);
}