循环字符串最大最小表示法模版
循环字符串最大最小表示法模版
定义字符串abcde和cdeab同构,因为abcde转两格即为cdeab,该字符串称为循环字符串。
循环字符串的字典序最小的同构字符串称为最小表示,最大表示同理。
这里只给模版,以后再深究。
int getMin(char *s) ///返回首位置 { int n=strlen(s); int i=0,j=1,k=0; while(i<n&&j<n&&k<n){ int t=s[(i+k)%n]-s[(j+k)%n]; if(!t) k++; else{ if(t>0) i+=k+1; else j+=k+1; if(i==j) j++; k=0; } } return min(i,j); } int getMax(char *s) { int n=strlen(s); int i=0,j=1,k=0; while(i<n&&j<n&&k<n){ int t=s[(i+k)%n]-s[(j+k)%n]; if(!t) k++; else{ if(t<0) i+=k+1; else j+=k+1; if(i==j) j++; k=0; } } return min(i,j); }
没有AC不了的题,只有不努力的ACMER!