码迷,mamicode.com
首页 > 其他好文 > 详细

翻转单词顺序 左旋字符串 42

时间:2015-05-03 11:47:49      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

? ?

引言

? ?

这种翻转的问题会遇到很多,其实就是一个倒序的问题,对于第一个题只是想翻转单词的顺序,而并不想把整个字符串翻转了,如果完全翻转的话,比如I am a student.中所有字符翻转得到.tneduts a ma I。显然不符合要求,但已经很接近答案了,仔细观察可以发现,我们离最终答案只差一步,就是把每个空格切分出的字符串再一次反序即可,所以我们需要根据空格切分出每个单词,然后再把每个单词翻转了,然后再重新组合成句子

? ?

ps.书中只要求最后答案是student. a am I就可以了,但是我觉得这个.很碍事,其实对原来的句子可以不考虑最后的.进行翻转,也就是把array.length-1变成array.length-2

? ?

对于第二个题也是对reverse函数的变形调用,很多其实都是想通的,左旋字符串abcdefgindex=2,有时候问题不要跳太大,慢慢一步一步转的话我们就可以发现解题的关键所在,如果我们需要旋转的话应该如何去转

? ?

因为最后会想要成cdefgab,也就是把ab移到了后面,而之前的reverse也可以把前面的移到后面,我们不让先将整个reverse一下,gfedcba,这个与我们想要的有什么不同,如果我们cb之间有个空格的话gfedc ba是不是再翻转一下每个单词的顺序就ok了,我们这里分别对gfedcba再次调用一下reverse函数就ok,这里我们可能会用到substring这个函数

? ?

分析问题

? ?

翻转单词

? ?

我们先把整个句子翻转,然后以空格为split,分割字符串,接下来对每个单词再进行翻转,然后重新组合

? ?

翻转字符串的函数

? ?

static String reverse(String string) {

char[] array = string.toCharArray();

int i = 0, j = array.length - 1;

while (i < j) {

char tem = array[i];

array[i] = array[j];

array[j] = tem;

i++;

j--;

}

return String.valueOf(array);

}

? ?

翻转整个句子的函数

? ?

static String reverseSentence(String string){

String reversedString=reverse(string);

String[] splitStrings=reversedString.split(" ");

String resultString="";

for(String str:splitStrings){

resultString=resultString+reverse(str)+" ";

}

return resultString;

}

? ?

左旋字符串

? ?

我们首先也把整个字符串翻转,然后切分字符串,利用substring函数,将gfedcba分别赋值给part1part2,然后分别对part1part2翻转,然后将翻转后的字符串再连起来就可以了

翻转单词顺序 左旋字符串 42

标签:

原文地址:http://www.cnblogs.com/keedor/p/4473397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!