长沙做手机网站建设,中华建设杂志社网站,用家用电脑建设网站,个人适合做跨境电商吗题目:定义字符串的左旋转操作#xff0c;把字符串前面的若干个字符移动到字符串的尾部 解: 1.最笨的一种方法就是#xff0c;每次将字符串左移1个位置#xff0c;然后把最左边的字符放到最后#xff0c;这样移动满次数就行#xff0c;假设字符串长度是n#xff0c;要移动… 题目:定义字符串的左旋转操作把字符串前面的若干个字符移动到字符串的尾部 解: 1.最笨的一种方法就是每次将字符串左移1个位置然后把最左边的字符放到最后这样移动满次数就行假设字符串长度是n要移动前面m个字符(mn)那么时间O(m*n) 2.编程珠玑上的题目把n长字符串分为m n-m,记m长子串为A,n-m长子串为B则字符串可表示为AB移动之后的字符串BA首先求A的转置A(t)(即字符串逆置),B的转置B(t) 然后求A(t)B(t)的转置,(A(t) B(t))(t)(B(t))(t) (A(t))(t)BA 代码 #includeiostream
#includestring
#includestring.h
#includestdio.husing namespace std;/*第一种这个时间是O(kn)空间是O(1)*/void leftreverse(string str,int k)
{int i0;while(ik){char tempstr[0];int j;for(j1;jstr.size();j)str[j-1]str[j];str[j-1]temp;i;}
}/*第二种根据XY的转置求*///逆转字符串
void reverse(char* begin,char* end)
{if(begin!NULL end!NULL){while(beginend){char temp*begin;*begin*end;*endtemp;begin;end--;}}
}void leftreverse2(char* str,int k)
{if(str){int lengthstatic_castint(strlen(str));if(length0 k0 klength){char* firststartstr;char* firstendstrk-1;char* secondstartstrk;char* secondendstrlength-1;reverse(firststart,firstend);reverse(secondstart,secondend);reverse(firststart,secondend);}}
}#define MAX 100
int main(void)
{char str[MAX];int k;cinstr;cink;leftreverse2(str,k);coutstrendl;return 0;
} 转载于:https://www.cnblogs.com/buxianghe/p/3262355.html