一.字符串左旋转问题

来源:互联网 发布:赚钱软件投资返利 编辑:程序博客网 时间:2024/05/01 08:50

举个例子,abcef向左旋转两位得到cefab

简单的方法就是先编写一个左移一位的函数,然后移动需要移动的位数k次,这样的话时间复杂度为O(k*n),n为字符串位数


本文思路:令X=ab,Y=cef,则X翻转后得到X^T为ba,Y翻转后得到Y^T为fec,则(X^T,Y^T)拼接后翻转正好是所想要结果

本文的方法时间复杂度为O(k)+O(n-k)+O(n)=O(n)


#include<iostream>using namespace std;char* invert(char* start,char* end){char *temp=start;char  t;while(start<end&&start!=NULL&&end!=NULL){t=*start;*start=*end;*end=t;start++;end--;}return temp;}char *rotate(char *s,int n){int len=strlen(s);invert(s,s+(n-1));invert(s+n,s+(len-1)); invert(s,s+(len-1)); return s;}void main(){char a[]="sdfghjkl";cout<<a[0];char *s=rotate(a,3);for(int i=0;i<strlen(s);i++){cout<<s[i]<<" ";}cout<<endl;}


0 0
原创粉丝点击