字符串的最大最小表示法 模板
2016-12-06 10:01
239 查看
#include<iostream> #include<string> using namespace std; /* 用最小表示法求字符串S的最小字典序 返回字典序最小的串的首字母位置 */ int minstr(char s[]) { int len=strlen(s); int i=0,j=1; while(i<=len-1 && j<=len-1) { int k=0; while(k<=len-1 && s[(i+k)%len]==s[(j+k)%len]) k++; if(k>=len) break; if(s[(i+k)%len]>s[(j+k)%len]) i=max(i+k+1,j+1);////此时s[i+1]到s[i+k]都不可能是最小字符串的开头,而且s[i+1]到s[j]也不可能是最小字符串的开头(s[i]开头的字符串与s[j]开头的字符串在比较,本身已经说明s[i]开头的字符串小于以s[i+1]开头到以s[j-1]开头的字符串了) else j=max(j+k+1,i+1);//同上道理 } return min(i,j); } /* 用最大表示法求字符串S的最大字典序 返回字典序最大的串的首字母位置 */ int maxstr(char s[]) { int len=strlen(s); int i=0,j=1; while(i<=len-1 && j<=len-1) { int k=0; while(k<=len-1 && s[(i+k)%len]==s[(j+k)%len]) k++; if(k>=len) break; if(s[(i+k)%len]<s[(j+k)%len]) i=max(i+k+1,j+1); else j=max(j+k+1,i+1); } return min(i,j); } int main() { return 0; }
相关文章推荐
- 理解字符串循环同构的最小/最大表示法+模板
- 字符串同构最小最大表示法模板&&manacher模板
- 最小最大表示法,求环形字符串的最小最大字典树(模板)
- zoj 2006 1729 字符串最小表示法 模板
- 【模板】字符串算法-字符串最小表示法
- 个人模板 字符串最小表示法
- 最小表示法和最大表示法模板
- zoj 2006 1729 字符串最小表示法 模板
- 【模板】字符串算法-字符串最小表示法
- zoj 2006 1729 字符串最小表示法 模板
- hdu 3374 next表,最大最小表示法模板
- HDU 3374 String Problem(最大最小表示法模板+KMP+next数组的运用)
- hdu 3374 String Problem(字符串最小最大表示法+kmp)
- 字符串的最小/最大表示法
- 字符串的最大最小表示法
- hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)
- 模板:各类型的最大数和最小数表示
- 字符串的最小表示法和最大表示法
- HDU 2609 How Many最大最小表示法的模板
- 字符串最小表示模板