旋转字符串

来源:互联网 发布:java读取文件 编辑:程序博客网 时间:2024/04/30 11:44

看了一个网站,上边把这个问题讲的非常的好,还有举一反三的例子。觉得非常好,像我这种算法渣渣的人,看了还是很有帮助的,哈哈哈,把我写的代码贴出来,希望大家可以进行指导。

/** * 字符串反转 * @author xiao *链表翻转。给出一个链表和一个数k, *比如,链表为1→2→3→4→5→6,k=2,则翻转后2→1→6→5→4→3, *若k=3,翻转后3→2→1→6→5→4, *若k=4,翻转后4→3→2→1→6→5,用程序实现。 *//** * 编写程序,在原字符串中把字符串尾部的m个字符移动到字符串的头部, * 要求:长度为n的字符串操作时间复杂度为O(n),空间复杂度为O(1)。 *  例如,原字符串为”Ilovebaofeng”,m=7,输出结果为:”baofengIlove” * @author xiao * *//** * 单词翻转。输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变, * 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 * 例如,输入“I am a student.”,则输出“student. a am I”。 * @author xiao * */public class TurnOver {public void Reverse(int a[],int from ,int to){while(from<to){int tmp = a[from];a[from++] = a[to];a[to--] = tmp;}}public void ReverseString(char a[] ,int from ,int to){while(from<to){char tmp = a[from];a[from++] = a[to];a[to--] = tmp;}}public static void main(String[] args) {int a [] = {1,2,3,4,5,6};String s = "Ilovebaofeng";String str = "I am a student.";Scanner mScanner = new Scanner(System.in);TurnOver turnOver = new TurnOver();int k = mScanner.nextInt();turnOver.Reverse(a,0,k-1);turnOver.Reverse(a, k, a.length-1);for(int i = 0;i<a.length;i++){System.out.print(a[i]);}char b[]=s.toCharArray();turnOver.ReverseString(b, 0, (b.length-k)-1);turnOver.ReverseString(b, b.length-k, b.length-1);turnOver.ReverseString(b, 0, b.length-1);for(int i = 0;i<b.length;i++){System.out.print(b[i]);}char c[] = str.toCharArray();int count = 0;int b =0;for(int i = 0;i<c.length;i++){if(c[i] == ' '){count++;if(count==1){turnOver.ReverseString(c, 0, i-1);}else {turnOver.ReverseString(c, b+1, i-1);}b = i;}}turnOver.ReverseString(c,b+1, c.length-1);turnOver.ReverseString(c, 0, c.length-1);for(int i = 0;i<c.length;i++){System.out.print(c[i]);}}}


0 0
原创粉丝点击