`
蒙面考拉
  • 浏览: 156056 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

寻找一个字符串连续出现最多的子串的方法(转)

 
阅读更多

算法描述
首先获得后缀数组,然后
1.第一行第一个字符a,与第二行第一个字符b比较,不等,则
2.第一行前两个字符ab,与第三行前两个字符cb比较,不等,则
3.第一行前三个字符abc,与第四行前三个字符bcb比较,不等,则
4.第一行前四个......
上述过程就相当于在原始字符串中,
第一趟,a与b比较,ab与cb比较,abc与bcb比较,abcb与cbca比较,abcbc与bcabc比较,abcbcb与cabc比较......
第二趟,b与c比较,bc与bc比较(相等,则继续向后取长度为2的子串比较,碰到不等为止,本例中因碰到ab停止),bcb与cbc比较......
第三趟,c与b比较,cb与cb比较(相等),cbc与bca比较......
......
使用后缀数组方便编程实现




//vs2005
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <utility>
#include <string>
using namespace std;

pair<int,string> fun(const string &str)
{
	vector<string> substrs;
	int maxcount=1,count=1;
	string substr;
	int i,len=str.length();
	for(i=0;i<len;++i)
	{
		substrs.push_back(str.substr(i,len-i));//取子串 
		cout<<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))//(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 _tmain(int argc, _TCHAR* argv[])
{	string str;
	pair<int,string> rs;

	str="abcbcbcabc";
	rs=fun(str);
	cout<<rs.second<<':'<<rs.first<<endl;

	return 0;
}

 

分享到:
评论

相关推荐

    Python实现针对给定字符串寻找最长非重复子串的方法

    主要介绍了Python实现针对给定字符串寻找最长非重复子串的方法,涉及Python针对字符串的遍历、排序、计算等相关操作技巧,需要的朋友可以参考下

    程序员编程艺术:面试和算法心得.pdf

    第一章 字符串 o 1.0 本章导读 o 1.1 旋转字符串 o 1.2 字符串包含 o 1.3 字符串转换成整数 o 1.4 回文判断 o 1.5 最长回文子串 o 1.6 字符串的全排列 o 1.10 本章习题 第二章 数组 o 2.0 本章导读 o 2.1 寻找最小的...

    LeetCode解题总结

    13.3 字符串的所有子回文字符串 13.4 最长公共子序列问题 13.5 字符串的编辑距离 13.6 不同路径之和 13.6.1 无障碍13.6.2 有障碍 13.7 最大矩形面积 13.8 字符串交叉组合 13.9 旋转字符串 13.10 最小路径和 13.11 ...

    Python Cookbook

    1.3 测试一个对象是否是类字符串 8 1.4 字符串对齐 10 1.5 去除字符串两端的空格 11 1.6 合并字符串 11 1.7 将字符串逐字符或逐词反转 14 1.8 检查字符串中是否包含某字符集合中的字符 15 1.9 简化字符串的...

    lrucacheleetcode-job_review:job_review

    给定一个字符串,寻找一个最长连续子串,子串中只有3种字符。比如a、b、c。它们可以多次出现 city_route 给定一批city_paires, 给出从cityA到cityB的所有路径. 如 北京 -- 天津 天津 -- 杭州 杭州 -- 北京 杭州 -- ...

    R语言经典实例(中+英)

     13.1 最小化或者最大化一个单参数函数 347  13.2 最小化或者最大化多参数函数 348  13.3 计算特征值和特征向量 350  13.4 主成分分析 351  13.5 简单正交回归 352  13.6 数据的聚类 354  13.7 预测二元变量...

    leetcode跳跃-leetcode:leetcode

    leetcode 跳跃 leetcode 1 两数之和 2 两数相加 3 无重复字符的最长子串 5 最长回文子串 ...盛最多水的容器 ...整数转罗马数字 ...罗马转整数 ...下一个排列 ...在排序数组中查找元素的第一和最后一个位置 ...找到字符串中

    C++大学教程,一本适合初学者的入门教材(part1)

    5.12.2 字符串处理库的字符串操作函数 5.13 有关对象的思考:对象间的交互 小结 术语 自测练习 自测练习答案 练习 特殊小节:建立自己的计算机 更多的指针练习 字符串操作练习 特殊小节:高级字符串操作练习 复杂...

    C++大学教程,一本适合初学者的入门教材(part2)

    5.12.2 字符串处理库的字符串操作函数 5.13 有关对象的思考:对象间的交互 小结 术语 自测练习 自测练习答案 练习 特殊小节:建立自己的计算机 更多的指针练习 字符串操作练习 特殊小节:高级字符串操作练习 复杂...

    世界500强面试题.pdf

    1.3.6. 在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b 52 1.3.7. n 个数字(0,1,…,n-1)形成一个圆圈 .................................................. 53 1.3.8. 定义 Fibonacci ...

    数据结构(C++)有关练习题

    2、利用二叉搜索树实现一个音像商店(小型书店、小型超市、或小型药店)的交易管理系统,要求实现以下功能: a. 该系统应该有一个字符型的主菜单; b. 能按字母顺序显示库存商品的名称和数量; c. 能添加...

    leetcode跳跃-leetcode-php:leetcodephp

    字符串相乘 通配符匹配 跳跃游戏 II 全排列 全排列 II 旋转图像 字母异位词分组 合并区间 不同路径 编辑距离 颜色分类 子集 单词搜索 从前序与中序遍历序列构造二叉树 买卖股票的最佳时机 二叉树中的最大路径和 最长...

    leetcode中国-Leetcode:数据结构算法fightingヾ(◍°∇°◍)ノ゙

    3、字符串相关 686 KMP算法-middle 49 hash表 value是list[] 151 error 6 zip()的使用以及边界 无重复字符的最长子串 子串一定的是连续的; 子序列不一定是连续的一段,但是下标要求是递增的; 子数组(子数组最少...

    javalruleetcode-algorithms:算法

    java lru leetcode 有趣的算法 有趣的字符串 最长回文子串(Manacher 算法) 线性字符串旋转到位 ...寻找具有最大和的连续子数组(Kadane 算法): 钾 查找第 K 个最大元素: K总和: 其他 LRU缓存实现:

    牛客华为1机试10道题答案C++.zip

    牛客华为1机试10道题,使用C++语言,适合准备华为机试的朋友。均在本地IDE运行通过。...4、字符串统计 5、磁盘容量排序 6、太阳能板最大面积 7、靠谱的车 8、整数对最小和 9、判断字符串子序列 10、按身高和体重排队

    javalruleetcode-alg:藻类

    java lru leetcode 有趣的算法 有趣的字符串 最长回文子串(Manacher ...寻找具有最大和的连续子数组(Kadane 算法): 钾 查找第 K 个最大元素: K总和: 其他 LRU缓存实现: 机器学习的东西 马尔可夫链可视化

    leetcode题库-developer-drills:熟悉和征服常见的数据结构和算法模式

    1(掌握):一次一个主题。 即要使用链表,解决所有与链表相关的问题 策略 2(暴露):为问题设计一种方法,然后比较解决方案。 不熟悉时的代码问题 策略 3(激励):淘汰尽可能多的可行问题以使球滚动。 一致性是 :...

    Visual C++ 编程资源大全(英文控件)

    04.zip Inserting an RTF string using StreamIn 用RTF插入一个RTF字符串(3KB)&lt;END&gt;&lt;br&gt;5,05.zip Providing a Format toolbar 提供一个格式的工具框(8KB)&lt;END&gt;&lt;br&gt;6,06.zip convert RTF String RTF ...

Global site tag (gtag.js) - Google Analytics