最小(大)表示法

给定一个字符串,把它首尾相连形成字符环,然后从某个点开始的字符串字典序最小,为该字符串的最小表示

最小最大的区别就是在第9行的>和<符号

在这里插入图片描述

最小

int mininum(char sec[]) {
	int n=strlen(sec);
	int k=0,i=0,j=1;
	while(k<n&&i<n&&j<n) {
		if(sec[(i+k)%n]==sec[(j+k)%n]) {
			k++;
		} 
		else { 
			sec[(i + k) % n] > sec[(j + k) % n] ? i = i + k + 1 : j = j + k + 1;
			if (i == j) j++;
			k = 0;
		}
	}
	i=min(i,j);
	return i;
}

最大

int mininum(char sec[]) {
	int n=strlen(sec);
	int k=0,i=0,j=1;
	while(k<n&&i<n&&j<n) {
		if(sec[(i+k)%n]==sec[(j+k)%n]) {
			k++;
		} 
		else { 
			sec[(i + k) % n] <sec[(j + k) % n] ? i = i + k + 1 : j = j + k + 1;
			if (i == j) j++;
			k = 0;
		}
	}
	i=min(i,j);
	return i;
}
posted @ 2021-07-22 17:52  cheems~  阅读(103)  评论(0编辑  收藏  举报