题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
这个思路和左旋字符串差不多,先翻转单个单词,再翻转整个串。
代码如下:
/** * * @param s 前面有空白和乱字符就用循环去掉,这里默认开始就是规则的英文单词 * @return */ public char[] reverseWordsOrder(char[] chars){ int start = -1; int end = 0; for(int i=0;i<chars.length;i++){ char c = chars[i]; //正好复习下ascii码 if(((c>=65&&c<=90)||(c>=97&&c<='z'))&&start==-1){//找到start起点 start = i; } if(c>=65&&c<=90||(c>=97&&c<='z')) continue; else{ end = i-1; this.reverse(chars, start, end); start = -1; } } reverse(chars,0,chars.length-1); return chars; } private void reverse(char[] chars,int start,int end){ while(start<end){ char temp=chars[start];chars[start]=chars[end];chars[end]=temp; start++; end--; } }
ps:java String的immutable属性导致这种算法一般应该不会出。用字符数组模拟字符串实在是。。。。。。。。。。。。。。。。。。。。