剑指Offer之左旋转字符串(Move!Move!!Move!!!)
2013-12-02 17:35
302 查看
题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
输入:多组测试数据,每个测试数据包含一个字符序列S和非负整数K。其中S的长度不超过1000。
输出:对应每个测试案例,输出新序列。
样例输入:
样例输出:
【解析】
思路源于前一篇文章思路:反转单词顺序
【代码】
输入:多组测试数据,每个测试数据包含一个字符序列S和非负整数K。其中S的长度不超过1000。
输出:对应每个测试案例,输出新序列。
样例输入:
UDBOJ 4 abba 1
样例输出:
JUDBO bbaa
【解析】
思路源于前一篇文章思路:反转单词顺序
【代码】
/********************************* * 日期:2013-12-02 * 作者:SJF0115 * 题号: 题目1362:左旋转字符串(Move!Move!!Move!!!) * 来源:http://ac.jobdu.com/problem.php?pid=1362 * 结果:AC * 来源:剑指Offer * 总结: **********************************/ #include <stdio.h> #include <malloc.h> #include <string.h> char *str; //反转单词 void ReverseWord(char* words,int begin,int end){ int temp; if(words == NULL || begin > end || begin < 0){ return; } //反转 while(begin < end){ temp = words[begin]; words[begin] = words[end]; words[end] = temp; begin ++; end --; } } char* Reverse(char* str,int n){ if(str == NULL || n < 0){ return ""; } int len = strlen(str); //分成两部分(1)前n项(2)剩余项 //反转前n个 ReverseWord(str,0,n-1); //反转剩余 ReverseWord(str,n,len-1); //全部反转 ReverseWord(str,0,len-1); return str; } int main() { int i,n; str = (char*)malloc(sizeof(char)*1001); while(scanf("%s",str) != EOF){ scanf("%d",&n); //左旋转 //注意一下n需要取余就可以了,不能超过字符串自身的长度 n = n % strlen(str); str = Reverse(str,n); //输出 for(i = 0;i < strlen(str);i++){ printf("%c",str[i]); } printf("\n"); }//while return 0; }
相关文章推荐
- 《剑指offer》刷题笔记(知识迁移能力):左旋转字符串
- 剑指Offer——翻转单词顺序VS左旋转字符串
- 剑指offer系列之四十五:左旋转字符串
- 九度_题目1362:左旋转字符串(Move!Move!!Move!!!)
- 剑指offer—左旋转字符串
- 剑指offer-左旋转字符串
- 剑指Offer----面试题42(2):左旋转字符串
- 剑指Offer 面试题42 左旋转字符串java实现
- 剑指offer:左旋转字符串
- 左旋转字符串(剑指offer)O(n) 不用辅助空间
- 剑指Offer: 翻转单词顺序列、左旋转字符串
- 剑指offer——左旋转字符串
- 剑指offer-面试题42-翻转单词顺序VS左旋转字符串
- 《剑指offer》左旋转字符串
- 剑指offer——面试题42-1:左旋转字符串
- 剑指Offer系列-面试题42:翻转单词顺序和左旋转字符串
- 《剑指offer》-左旋转字符串
- 剑指Offer(Java版):反转单词顺序VS左旋转字符串
- 剑指offer(四十二)之左旋转字符串
- 《剑指offer》左旋转字符串