最小表示法(模板)


const int maxn=100005;
char s[maxn];
int Get_min() {
	int n=strlen(s);
	int i=0,j=1,k=0,t;
	//表示从i开始k长度和从j开始k长度的字符串相同
	while(i<n && j<n && k<n) {
		t=s[(i+k)%n]-s[(j+k)%n];
		if(!t) k++;//s[i+k]==s[j+k]
		else{
			if(t>0) i+=k+1;//s[i+k]>s[j+k]
			else j+=k+1;//s[i+k]<s[j+k]
			if(i==j) j++;
			k=0;
		}
	}
	return i<j?i:j;
}

猜你喜欢

转载自blog.csdn.net/xiao_k666/article/details/88068780
今日推荐