题目
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路
要寻求O(1)的空间复杂度,就必须在原字符串进行修改:
- 首先翻转整个字符串。
- 再判断每一个单词,分别翻转。
代码
java不能直接修改String,因此转成char[]来做。如果不算char[]的空间,空间复杂度的确是O(1)的。
public class Solution {
public String ReverseSentence(String str) {
if(str==null||str.length()==0)
return str;
char[] s = str.toCharArray();
reverse(s, 0, s.length-1);
int i=0,j=0;
while(i<s.length){
if(s[i]==' '){
i++;j++;
}
else if(j==s.length||s[j]==' '){
reverse(s, i, j-1);
j++;
i=j;
}
else
j++;
}
return new String(s);
}
void reverse(char[] s, int beg, int end){
for(int i=beg,j=end;i<j;i++,j--){
char tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}
}