一.字符串左旋轉問題

舉個例子,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;
	
}


發佈了54 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章