字符串中连续子串出现次数统计,获取连续出现次数最多的子串
2013-09-20 11:05
525 查看
// STR.cpp : 定义控制台应用程序的入口点。 // #include "stdio.h" #include "stdlib.h" #include "iostream" #include "string" #include "vector" #include "map" using namespace std; vector<string> FindAllSubString(string str); map<string, int> SubStrCount(string str); map<string, int> FindAllSuccessSubString(string str); int main(int argc, char * argv[]) { //string name = "wei song"; //string subName = name.substr(0,5); //string sub2 = name.substr(0, 0); //cout<<sub2<<endl; //cout<<subName<<endl; //cout<<name<<endl; // test string test = "abcbcbcabc"; vector<string> result = FindAllSubString(test); for(int i = 0; i < result.size(); i++) { cout<<result[i]<<endl; } map<string, int> m_result = SubStrCount(test); cout<<"////////////////////////////////////////////////////////"<<endl; for(map<string, int>::iterator iter = m_result.begin(); iter != m_result.end(); iter++) { cout<<iter->first<<" "<<iter->second<<endl; } // cout<<"////////////////////////////////////////////////////////"<<endl; string test2 = "aaabcaa"; map<string, int> m_map = FindAllSuccessSubString(test); string maxsub; int max = 0; for(map<string, int>::iterator iter = m_map.begin(); iter != m_map.end(); iter++) { if(iter->second > max) { max = iter->second; maxsub = iter->first; } } cout<<maxsub<<":"<<max<<endl; system("pause"); return 0; } // 统计所有可能出现的子串 vector<string> FindAllSubString(string str) { vector<string> result; int length = str.length(); // 获得所有子串 for(int i = 0; i <= length; i++) { // i 为子串的长度 // 从原字符串的不同的位置获取子串 for(int j = 0; j <= length - i; j++) { // 获取在偏移j 长度为 i的子串 string sub = str.substr(j, i); bool flag = false; for(vector<string>::iterator iter = result.begin(); iter != result.end(); iter++) { if(*iter == sub) { flag = true; break; } } if(flag == false) { result.push_back(sub); } } } return result; } // 统计每个子串出现的次数 map<string, int> SubStrCount(string str) { map<string, int> result; int length = str.length(); for(int i = 1; i <= length; i++) { // i 为子串长度 for(int j = 0; j<= length - i; j++) { // j 为计算子串的偏移量 string sub = str.substr(j, i); result[sub]++; } } return result; } // 统计所有可能出现的子串 // 计算连续出现的子串的数量 map<string, int> FindAllSuccessSubString(string str) { map<string, int> s_map; int length = str.length(); // 获得所有子串 for(int i = 1; i <= length; i++) { // i 为子串的长度 // 从原字符串的不同的位置获取子串 for(int j = 0; j <= length - i; j++) { // 获取在偏移j 长度为 i的子串 string sub = str.substr(j, i); int subLength = sub.length(); int count = 1; // 子串的连续出现的次数 // 统计连续子串的出现次数 int k; for(k = j + subLength; k <= length - subLength; k = k + subLength) { if(str.substr(k, subLength) == sub) count++; else break; } if(count > s_map[sub]) s_map[sub] = count; } } return s_map; }
相关文章推荐
- 求一个字符串中【连续】出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 求字符串中连续出现次数最多的子串
- 找出字符串中连续出现次数最多的子串
- 找出字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 找出字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 所谓微软面试题的解答:求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 寻找一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现的次数最多的子串
- 寻找一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 最新的微软面试题,题目:求一个字符串中连续出现次数最多的子串
- 所谓微软面试题的解答:求一个字符串中连续出现次数最多的子串
- 求一个字符串中连续出现次数最多的子串
- 【字符串问题】求一个字符串中连续出现次数最多的子串
- 求字符串中出现次数最多且最长的子串、连续出现次数最多的子串