字符串移位
? ??把一個字符串左選擇操作:吧字符串前面的的若干字符移動到字符串的尾部,如吧字符串的abcdef左旋轉2位得到字符串cdefab。
? ?思路1.暴力移位發
? ? 把移動m部拆分成移動一步。
? ? void leftshiftone(char* s,int n){
? ? ? ? char t=s[0];
? ? ? ? for(int i=1;i<n;++i)
? ? ? ?{
? ? ? ? ? ? ?s[i-1]=s[i];
? ? ? ?}
? ? ? s[n-1]=t;
? ? ?}
? ? ?移動m位,如下
? ? void leftshift(char* s,int n,int m)
? {
? ? ? ?while(m--)
? ? ? ? {
? ? ? ? ? ? leftshiftone(s,n);
? ? ? ? }
? ?}
2.指針翻轉法
? ? abc def ghi->def abc ghi->def ghi abc
? ?定義兩個指針,p1指向ch[0],p2指向ch[m];
? ?一下過程循環m次,交換p1和p2所指的元素,然后p1++,p2++;
? ? 1.第一步,交換abc和def,abc defghi->def abc ghi
? ? 2.第二步,交換abc和ghi,def abcghi->def ghiabc
? ? 程序設計,先循環m次,交換abc,def,之后判斷p2+m-1.
? ? #include<iostream>
? ? void rotate(string &str,int m)
? ?{
? ? ? if(str.length()==0||m<=0)
? ? ? ? ? ? ?return;
? ? ? ?int n=str.length();
? ? ? ?if(m%n<=0)
? ? ? ? ? ?return ;
? ? ? ? int p1=0,p2=m;
? ? ? ? int k=(n-m)-n%m;
? ? ? ? while(k--)
? ? ? ? {
? ? ? ? ? ? ? swap(str[p1],str[p2])
? ? ? ? ? ? ? p1++;
? ? ? ? ? ? ? p2++;
? ? ? ? ?}
? ? ? ? int r=n-p2;
? ? ? ?while(r--)
? ? ? ?{
? ? ? ? ? ? ?int i=p2;
? ? ? ? ? ? ?while(i>p1)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? swap(str[i],str[i-1]);
? ? ? ? ? ? ? ? ?i--;
? ? ? ? ? ? }
? ? ? ? ? p2++;
? ? ? ? ? p1++;
? ? ? }
思路3,遞歸轉換
? ??
? ? ? ?
? ?}
總結
- 上一篇: Anroid推送服务
- 下一篇: Hadoop IO 文件压缩 序列化