`
蒙面考拉
  • 浏览: 161115 次
  • 性别: 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;
}

 

分享到:
评论

相关推荐

    C++实现找出两个字符串中最大的公共子串

    在编程领域,字符串操作是常见的任务之一,尤其是在算法设计和数据处理中...通过理解并掌握这种动态规划解决方案,可以扩展到处理更复杂的问题,比如寻找多个字符串的最大公共子串或者最长公共子序列(不连续的子串)。

    java实现字符串匹配求两个字符串的最大公共子串

    最大公共子串是指在两个字符串中都出现的最长的连续子串。该算法的基本思想是通过构建一个二维布尔矩阵,其中矩阵的每个元素表示对应位置的字符是否相等。如果相等,则值为true,否则为false。然后,通过遍历这个...

    输出一个字符串的全部子串.docx

    描述中的“输出字符串的子串”进一步确认了这个任务是关于获取一个字符串的所有可能的连续子序列。 在提供的代码片段中,我们看到一个名为`splitString`的方法,它接受两个参数:`arr_length`(表示子串的目标长度...

    PHP实现求两个字符串最长公共子串的方法示例

    在编程领域,最长公共子串(Longest Common Substring,LCS)问题是一个经典的问题,它寻找两个或多个字符串中的最长连续子序列,这个子序列同时存在于所有字符串中。在这个问题中,我们专注于PHP如何解决两个字符串...

    如何取得中文字符串中出现次数最多的子串

    在处理中文字符串时,若需要寻找其中出现频率最高的子串,可通过编程算法实现这一功能。下面将详细阐述如何通过编写PHP代码来找出中文字符串中出现次数最多的子串。 首先,需要理解中文字符串的构成。在计算机处理...

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

    在Python编程中,寻找最长非重复子串是一个常见的字符串处理问题。这个问题的目的是找到一个字符串中最长的子串,这个子串在原字符串中只出现一次。这里介绍了一种使用滑窗切片和字典来解决此问题的方法。 首先,...

    在字符串中找出连续最长的数字串+

    "在字符串中找出连续最长的数字串并输出最长的字符串长度"这个问题是字符串处理中的一个经典实例,它涉及到字符串遍历、模式匹配和动态规划等概念。 首先,我们需要理解问题的核心:在给定的字符串中寻找连续的数字...

    JavaScript自定义函数实现查找两个字符串最长公共子串的方法

    在JavaScript编程中,有时我们需要找出两个字符串之间的最长公共子串,这是字符串处理中一个常见的问题。最长公共子串是指在两个或多个字符串中都存在的最长的连续字符序列。本篇文章将详细讲解如何通过自定义函数来...

    js判断出两个字符串最大子串的函数实现方法

    总之,通过上述方法,我们可以在JavaScript中实现一个查找两个字符串最大公共子串的函数。该函数的算法思路是通过简单的双指针遍历实现的,适用于基本的字符串匹配需求。对于更复杂或性能要求更高的场景,建议采用...

    字符串中的最长重复串

    Manacher的算法是一种优化后的动态规划方法,专门针对寻找字符串中的最长回文子串,但在适当修改后,也可以用于求解最长重复子串。它利用了字符串的对称性,减少了重复计算,提高了效率。 无论采用哪种方法,都...

    查询出字符串中重复出现且最长的子字符串

    在编程领域,寻找字符串中重复出现且最长的子字符串是一个常见的字符串处理问题。这个任务涉及到字符串操作、算法设计以及可能的动态规划或滑动窗口等技术。以下将详细阐述这个问题的解决方案及其相关知识点。 首先...

    算法合集之《后缀数组——处理字符串的有力工具》

    - **不小于k个字符串中的最长子串**:在一组字符串中寻找同时出现在至少k个字符串中的最长子串。 - **每个字符串至少出现两次且不重叠的最长子串**:寻找在每个字符串中至少出现两次,且不重叠的最长子串。 - **出现...

    后缀数组——处理字符串的有力工具1

    后缀数组可以看作是一系列字符串后缀的排序,其中每个元素都是原字符串的一个后缀,按字典序排列。相比于后缀树,后缀数组在实现上更为简单,同时在时间和空间效率上也有良好的表现。 ### 基本定义 后缀数组是将一...

    求两字符串的最长公共子字符串.docx

    最长公共子串是指在两个字符串中都连续出现且长度最长的子串,与最长公共子序列(Longest Common Subsequence,LCS)不同,它要求子串必须是原始字符串的连续片段。 为了解决最长公共子串问题,可以采用穷举法,这...

    ACM字符串题目及源代码[参照].pdf

    - PKU3693和SPOJ687题目都是关于找出重复次数最多的连续重复子串,这可能需要遍历整个字符串,维护当前子串及其出现次数的状态。 7. **长度不小于k的公共子串的个数**: - PKU3415要求计算所有长度不小于k的公共...

    求两个字符串的最长公共字串

    该问题主要涉及到两个或多个字符串之间共同拥有的最长连续字符序列的寻找。这种应用场景广泛存在于文本比对、生物信息学中的基因序列比对等多个领域。 #### 二、问题描述 题目要求编写一个C++程序来找到两个给定...

    输出最长子串的代码

    在编程领域,"最长子串"通常是指在一个或多个字符串中找到共享的、最长的连续字符序列。这个概念广泛应用于文本处理、数据挖掘以及算法竞赛等场景。在本例中,我们将探讨如何编写一个程序来找出给定字符串集合中的...

    字符串算法

    9. **滑动窗口最大/最小值问题**:在处理字符串时,滑动窗口经常用于寻找特定条件下的子串,如找到字符串中最长的连续0或找到子串中的最大/最小字符。 10. **字符串分词与词性标注**:在自然语言处理中,字符串算法...

    求串中最长重复子串。

    假设有一个字符串S,我们的任务是找出其中最长的重复子串,即在S中至少出现两次的最长连续子序列。这个问题不仅涉及到字符串匹配的基本概念,还可能涉及到数据结构和算法的高级应用。 ### 二、数据结构设计 为了...

Global site tag (gtag.js) - Google Analytics