字符串---求一个字符串中连续出现次数最多的子串
来源:互联网 发布:浙江大学宁波软件学院 编辑:程序博客网 时间:2024/06/08 10:22
基本概念:
字符串的前缀是指字符串的任意首部。字符串“abbc”的前缀有“a”,“ab”,“abb”,“abbc”。
字符串的后缀是指字符串的任意尾部。字符串“abbc”的后缀有“c”,“bc”,“bbc”,“abbc”。
基本算法描述: 例如给出一个字符串abababa 求连续出现次数最多的子串。
1、穷举出所有的后缀子串
substrs[0] = abababa; substrs[1] = bababa; substrs[2] = ababa; substrs[3] = baba; substrs[4] = aba; substrs[5] = ba; substrs[6] = a;
2、然后进行比较
substrs[0]比substrs[1]多了一个字母,如果说存在连续匹配的字符,那么 substrs[0]的第1个字母要跟substrs[1]首字母匹配,同理 substrs[0]的前2个字母要跟substrs[2]的前2个字母匹配(否则不能叫连续匹配) substrs[0]的前n个字母要跟substrs[n]的前n个字母匹配.
如果匹配的记下匹配次数。如此可以求得最长连续匹配子串。
实现代码:
#include <iostream>#include <string>#include <vector>using namespace std;pair<int, string> MaxSubStr(const string &str){ vector<string> substrs;//向量存储后缀子串 int maxcount = 1, count = 1; string substr; int i, len = str.length();//字符串长度 //建立所有后缀子串并打印 for(i=0; i<len; ++i) //substr函数复制子字符串:从指定位置i开始,并具有指定的len-i长度 substrs.push_back(str.substr(i, len-i)); for(i=0; i<len; ++i) cout<<"substrs["<<i<<"] = "<<substrs[i] << endl; for(i=0; i<len; ++i) { for(int j=i+1; j<len; ++j) { count = 1; if(substrs[i].substr(0, j-i) == substrs[j].substr(0,j-i)) {//如果匹配 ++count; for(int k=j+(j-i); k<len; k+=j-i) { if (substrs[i].substr(0,j-i) == substrs[k].substr(0, j-i)) ++count; else break; } if(count > maxcount) { maxcount = count; substr=substrs[i].substr(0, j-i); } } } } return make_pair(maxcount, substr);}int main(){ pair<int, string> rs; string str="abababababaccccc"; rs = MaxSubStr(str); cout << rs.second<<':'<<rs.first<<'\n'; return 0;}
结果:
substrs[0] = abababababacccccsubstrs[1] = bababababacccccsubstrs[2] = ababababacccccsubstrs[3] = babababacccccsubstrs[4] = abababacccccsubstrs[5] = bababacccccsubstrs[6] = ababacccccsubstrs[7] = babacccccsubstrs[8] = abacccccsubstrs[9] = bacccccsubstrs[10] = acccccsubstrs[11] = cccccsubstrs[12] = ccccsubstrs[13] = cccsubstrs[14] = ccsubstrs[15] = cab:5Process returned 0 (0x0) execution time : 0.259 sPress any key to continue.
0 0
- 求一个字符串连续出现次数最多的子串
- 求字符串中连续出现次数最多的子串
- 求字符串中连续出现次数最多的子串
- 字符串---求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现并且出现次数最多的子串.
- 求一个字符串中出现次数最多的子串(并不是连续的)
- 编程珠玑(四)求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现的次数最多的子串[C语言实现]
- 求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串【转】
- 求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- leetcode-Reverse Linked List
- 初学 Java Web 开发,请远离各种框架,从 Servlet 开发
- 字符串之数字子串求和
- 解析Android ListView工作原理及其缓存机制
- android 加密
- 字符串---求一个字符串中连续出现次数最多的子串
- Codevs_P1036 商务旅行(LCA)
- KMP
- 登入测试
- MyBatis(4)MyBatis入门程序
- android6 titlebar 详解
- mysql批量删除相同前缀的表格
- sourceTree 使用前准备
- java的类学习