- 序列自动机
for(int i=n;i;i--){ for(int j=0;j<26;j++) next[i-1][j]=next[i][j]; next[i-1][s[i]-'a']=i; }
- 最大最小表示法
int min_max_express(char *s,int len,bool flag) { int i=0,j=1,k=0; while(i<len&&j<len&&k<len) { int t=s[(j+k)%len]-s[(i+k)%len]; if(t==0) k++; else { if(flag) { if(t>0) j+=k+1;else i+=k+1; } else { if(t>0) i+=k+1; else j+=k+1; } if(i==j) j++;k=0; } }return min(i,j); }