
思路:先将整个数组reverse,然后遍历数组识别出每个单词,再将每一个单词reverse。由于这边要in-place ,不能用extra space。所以我们reverse的策略就是头尾互换,由头尾向中间推进。很简单,直接给出代码:
class Solution {
public void reverse(char[] s, int left, int right) {
while(left < right){
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++;
right--;
}
}
public void reverseEachWord(char[] s){
int pre = 0;
for(int i = 0; i < s.length; i++){
if(i == s.length-1){
reverse(s,pre,i);
}
if(s[i] == ' '){
reverse(s,pre,i-1);
pre = i+1;
}
}
}
public void reverseWords(char[] s) {
reverse(s,0,s.length-1);
reverseEachWord(s);
}
}
总结:
- 和151题很像,但是这题不需要考虑那些乱七八糟的空格问题,可以合在一起看。
本文介绍了一种在原地(in-place)反转数组中单词的算法,通过两次反转实现:首先整体反转数组,然后逐个反转每个单词。文章详细解释了算法思路,并提供了具体的Java代码实现。
502

被折叠的 条评论
为什么被折叠?



