面试题五十八:翻转字符串
题目一:翻转单词顺序
方法一:首先总体全部翻转,接着再把各个单词再翻转
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函数调用三次
注意:输入空指针问题,内存下标越界问题
浪波激泥