题目地址:
https://www.lintcode.com/problem/reverse-words-in-a-string-ii/description
给定一个英文句子,由若干单词组成,单词之间以空格隔开。要求将整个句子翻转一下,但不要改变单词内部的字母顺序。
先将单词左右翻转,然后再将整个句子翻转即可。代码如下:
public class Solution {
/**
* @param str: a string
* @return: return a string
*/
public char[] reverseWords(char[] str) {
// write your code here
if (str == null || str.length == 0) {
return str;
}
int i = 0;
while (i < str.length) {
// 解析出单词
int j = i;
while (j < str.length && str[j] != ' ') {
j++;
}
// 翻转单词
reverse(str, i, j - 1);
i = j + 1;
}
// 翻转整个句子
reverse(str, 0, str.length - 1);
return str;
}
// 翻转str[i : j]
private void reverse(char[] str, int i, int j) {
while (i < j) {
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
i++;
j--;
}
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。