LC 186 Reverse Words in a String II(M)
Given an input string, reverse the string word by word. A word is defined as a sequence of non-space characters.
The input string does not contain leading or trailing spaces and the words are always separated by a single space.
For example, Given s = "the sky is blue", return "blue is sky the".
Could you do it in-place without allocating extra space?
边界条件
解题思路
通过两遍翻转,先单个字串翻转,然后全部字符串一起反正 两次翻转保证每个字符串的顺序正常,
public void reverseWords(char[] s) {
int i=0;
// 每个字单独翻转
for(int j=0; j<s.length; j++){
if(s[j]==' '){
reverse(s, i, j-1);
i=j+1;
}
}
// 最后一个字单独翻转
reverse(s, i, s.length-1);
// 整个字符串全部翻转
reverse(s, 0, s.length-1);
}
public void reverse(char[] s, int i, int j){
while(i<j){
char temp = s[i];
s[i]=s[j];
s[j]=temp;
i++;
j--;
}
}
Last updated
Was this helpful?