面试题五十八:翻转字符串

 

题目一:翻转单词顺序

方法一:首先总体全部翻转,接着再把各个单词再翻转
i am a surper man.
.nam reprus ma i
man. surper am i

  static char [] reverse(char[]a,int be,int end) {
         while(be<end) {
              char temp=a[be];
              a[be]=a[end];
              a[end]=temp;
              be++;
              end--;
         }
         return a;
     }
     
     static char [] reversemain(char[]a) {
         if(a==null)
              return null;      
         //翻转整个句子
         a=reverse(a,0,a.length-1);
         int be=0,end=0;
         //翻转各个单词
         while(be<a.length-1) {
              if(a[be]==' ') {
                  be++;
                  end++;
              }
              else if(a[end]==' '||end==a.length) {
                  //每个单词的尾部;
                  end--;
                  a=reverse(a,be,end);
                  be=++end;//跳到下一个单词
              }
              else end++;            
         }
         return a;
     }

题目二:左旋转字符串:把前面若干个字符移动到后面
abcdefg 2
ba gfedc
cdefg ab
只需对上一个reverse函数调用三次
注意:输入空指针问题,内存下标越界问题

 

posted @ 2020-03-29 16:59  浪波激泥  阅读(224)  评论(0编辑  收藏  举报