字符串的旋转

来源:互联网 发布:python 余弦相似度 包 编辑:程序博客网 时间:2024/04/23 14:14

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);

}

}

0 0
原创粉丝点击