最小最大表示法,求环形字符串的最小最大字典树(模板)
2013-08-08 09:59
302 查看
最小表示法:
初始时,i=0,j=1,分别以i,j,为起始点顺着i,j,往下比较直到找的str[i+k]!=str[j+k],然后分两种情况考虑:
1、 str[i+k]>str[j+k],i变成i=i+k+1,j不变,然后继续往下比较。
2、 str[i+k]<str[j+k],j变成j=j+k+1,i不变,然后继续往下比较。
直到i或j大于串长,找较小者。
最大表示法,返回最大字典序:
初始时,i=0,j=1,分别以i,j,为起始点顺着i,j,往下比较直到找的str[i+k]!=str[j+k],然后分两种情况考虑:
1、 str[i+k]>str[j+k],i变成i=i+k+1,j不变,然后继续往下比较。
2、 str[i+k]<str[j+k],j变成j=j+k+1,i不变,然后继续往下比较。
直到i或j大于串长,找较小者。
int work(int m) { int i,j,l; i=0; j=1; while(i<m && j<m) { for(l=0;l<m;l++) if(str[(i+l)%m]!=str[(j+l)%m]) break; if(l>m) break; if(str[(i+l)%m] > str[(j+l)%m]) i=i+l+1; else j=j+l+1; if(i==j) j=i+1; } if(i<j) return i; return j; }
最大表示法,返回最大字典序:
int work(int len,char pat[]) //最大表示法 { //int len = strlen(pat); int i=0,j=1,k=0; while(i<len && j<len && k<len) { int t = pat[(i+k)%len] - pat[(j+k)%len]; if(!t) k++; else { if(t>0) j = j+k+1; else i = i+k+1; if(i == j) j++; k = 0 ; } } return i<j?i:j; }
相关文章推荐
- 字符串的最大最小表示法 模板
- 理解字符串循环同构的最小/最大表示法+模板
- 环形字符串最小最大表示法
- 字符串同构最小最大表示法模板&&manacher模板
- hdu 3374 String Problem(KMP+字符串最小最大表示)
- 字符串 最小表示法 O(n)算法 【模板】
- zoj 2006 Glass Beads(字符串的最小表示模板题)
- zoj 2006 1729 字符串最小表示法 模板
- 个人模板 字符串最小表示法
- zoj 2006 1729 字符串最小表示法 模板
- hdu 3374 String Problem(字符串最小最大表示法+kmp)
- 最大表示法--环形字符串最大字典序(HDU 5442)
- 字符串最小表示模板
- 【模板】字符串算法-字符串最小表示法
- 模板:各类型的最大数和最小数表示
- 字符串的最小最大表示法O(n)
- 字符串最小表示法模板
- 【模板】字符串算法-字符串最小表示法
- HDU 2609 How Many最大最小表示法的模板
- hnuun 11544 小明的烦恼——找字符串(求环形字符串的最小最大字典序)