自学day1:字符串的移位旋转
2015-12-17 12:31
267 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zzp1666155449/article/details/50338389
问题描述:给定一个字符串,将字符串字符串左移m位
例如
输入:abcdefg
4
输出:efgabcd
解法一:最简单的思路,循环左移,时间复杂度O(mn)
#include<stdio.h> #include<String.h> void ExchangeS(char *s,int n); int main() { char s[100]; int m; printf("输入字符串:"); scanf("%s",&s); printf("输入左移位数:"); scanf("%d",&m); int n=strlen(s); m%=n;//左移位数m大于字符串长度n时,与%n等价 while(m--){//左移m次,使开头的m个字符串移到尾部 ExchangeS(s,n); } puts(s); return 0; } void ExchangeS(char *s,int n)//左移 { char t=s[0]; int i=1; for(i;i<n;i++) { s[i-1]=s[i]; } s[n-1]=t; }
解法二:三步反转法
1.将字符串分为两部分
2..将所分的两部分中的所有字符反转,即abcd→dcba,efg→gfe
3.将上述得到的结果整体翻转,即dcbagfe→efgabcd
#include<stdio.h> #include<String.h> void ExchangeS(char *s,int m,int n); int main() { char s[100]; int m; printf("输入字符串:"); scanf("%s",&s); printf("输入左移位数:"); scanf("%d",&m); int n=strlen(s); m%=n;//左移位数m大于字符串长度n时,与%n等价 ExchangeS(s,0,m-1); ExchangeS(s,m,n-1); ExchangeS(s,0,n-1); puts(s); return 0; } void ExchangeS(char *s,int m,int n) { char t; while(m<n){ t=s[m]; s[m++]=s ; s[n--]=t; } }
因此此方法的时间复杂度为O(n)
相关文章推荐
- 【转】字符串循环移位(左旋转)问题
- alg : 字符串按照字符进行循环移位(左旋转 or 右旋转)
- 旋转字符串一:暴力移位法
- 旋转字符串;编程珠玑第二章;rotate a one-dimensional vector;循环移位数组;编程之美
- 字符串旋转词、句子逆序化、字符串移位、最小字典序字符串问题
- 数组循环移位(左旋转字符串)
- 字符串旋转与移位
- 旋转字符串(循环移位,rotate)
- 字符串_旋转_蛮力移位
- 【程序员编程艺术】学习记录2:左旋转字符串之循环移位法
- 字符串旋转与移位
- 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 * 如把字符串abcdef左旋转2位得到字符串cdefab。
- 剑指offer——左旋转字符串
- (1)左旋转字符串
- windows 程序设计自学:添加字符串资源
- 面试题58-题目二:左旋转字符串
- 一个小学奥数题的python实现(全排列,字符串循环移位,统计元素)
- 经典笔试题—— 判断两个字符串是否为旋转词
- 【BZOJ 4598】【SDOI 2016 Round2 Day1 T3】模式字符串
- 面试算法学习-1-字符串旋转