image.png

思路

  • 先对每一个单词实现翻转,再对整个数组实现翻转。
  • 这样单词实现了两次翻转,所以单词个体的顺序仍不变,但单词间的顺序发生了变化。
  1. class Solution {
  2. public void reverseWords(char[] s) {
  3. if(s.length==0) return;
  4. int index = 0;
  5. //先挨个单词进行反转
  6. for(int i=0;i<=s.length;i++){
  7. if(i==s.length||s[i]==' '){ //注意这里i==s.length对最后一个单词的边界条件判断
  8. reverse(s,index,i);
  9. index =i+1;
  10. }
  11. }
  12. reverse(s,0,s.length);
  13. }
  14. //辅助的反转方法
  15. public void reverse(char[] str,int start,int end){
  16. int count = 0;
  17. for(int i =start;i<(end+start)/2;i++){
  18. char t = str[i];
  19. str[i]=str[end-1-count];
  20. str[end-1-count]=t;
  21. count++;
  22. }
  23. }
  24. }