您的位置:首页 > 其它

字符串的旋转

2015-11-13 20:54 411 查看
1、给定一个字符串,要求将字符串的前m个移动到字符串的后面。abcdefg--->defgabc(m=3)

2、字符串按照单词进行反转,I am a student-->student a am I(这里空格就按1个算)

对于第一题:最简单的方式就是每次移动一个字符到字符串的最后,一共移动3个。(移动是非常耗时的)第二种:从结果出发 要求的结果是 defgabc那么怎样得到呢,可以把其分成两部分 defg 和abc 分别对其进行反转 得到 gfed 和cba 。他们的组合是 gfedcba 。发现是最初的反转。

对于第二题:和第一题类似,只是这里需要另外处理一下最后一个单词(应该可以不处理,但是我没有想到)。这里的是全部反转,然后按照空格进行反转,但是最后一个找不到空格,需要以length做完结束标识。代码如下:

package string;

public class StringDemo {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

String str="1234567890";

adjust_Str(str,12);

String str1="I am a student";

System.out.println(reverseByWord(str1));

}

/*

*将一个字符串前n个字符移动到字符串的尾部。

* */

private static void adjust_Str(String str,int num){

/*

* abcdef--->defabc过程: fed cba ---->def abc

* 整体反转,这样再把需要反转的字符串分段进行反转

* */

char [] ch=str.toCharArray();

int len=ch.length;

if(len==0||num>len){

System.out.println("不能进行旋转");

return ;

}else{

reverse(ch, 0, len-1);//整体旋转

reverse(ch,0,len-num-1);//对前len-num个进行旋转

reverse(ch,len-num,len-1);//对后num个进行旋转

}

System.out.println(ch);

}

private static void reverse(char [] ch,int s,int e){

//把数组中s到e进行反转

while(s<e){

char temp=ch[s];

ch[s]=ch[e];

ch[e]=temp;

s++;

e--;

}

}

private static void adjustStr(String str,int num){

char [] ch=str.toCharArray();

int len=ch.length;

if(len==0||num>len){

//如果字符串为空或者num>len

System.out.println("不能移动");

return;

}else{

//字符串不为空

while(num>0){

adjustF2E(ch);//把第一个元素移动到最后

num--;

}

}

System.out.println(ch);

}

private static void adjustF2E(char[] ch) {

// TODO Auto-generated method stub

char temp=ch[0];

for(int i=0;i<ch.length-1;i++){

ch[i]=ch[i+1];

}

ch[ch.length-1]=temp;

}

/*

* 字符串按照单词进行反转I am a Student --->Student a am I

* */ //tnedutS a ma I

private static String reverseByWord(String str){

char [] ch=str.toCharArray();

int len=ch.length;

if(len==0){

System.out.println("输入的是空字符串");

return "" ;

}else{

//整体反转

reverse(ch, 0, len-1);

//按照空格进行反转

int i=0;

for(int j=i;j<len;j++){

if(ch[j]==' '){//中间的单词反转。

reverse(ch,i,j-1);

i=j+1;

j=i;

}

if(j==len-1&&ch[i]!=ch[j]){//最后一个单词的反转

reverse(ch,i,j);

}

}

}

return new String(ch);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: