算法描述
首先获得后缀数组,然后
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; }
发表评论
-
析构函数为虚函数的原因
2012-09-09 11:42 840我们知道,用C++开发的时候,用来做基类的类的析构函数 ... -
hash的应用
2012-08-31 23:02 966第一部分为一道百度面试题Top K算法的详解;第二部分为关 ... -
微软智力题
2012-08-29 19:59 573第一组1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有 ... -
C++不能被继承的类
2012-08-27 20:16 1064一个类不能被继承, ... -
括号对齐问题
2012-08-27 10:47 1416解法一:左右括号成一对则抵消 可以 ... -
树的遍历
2012-08-19 10:43 722/****************************** ... -
堆排序
2012-08-16 14:24 886堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全 ... -
多态赋值
2012-08-14 16:16 836#include <iostream> usi ... -
static变量与static函数(转)
2012-08-13 10:15 750一、 static 变量 static变量大致分为三种用法 ... -
不用sizeof判断16位32位
2012-08-10 15:21 1708用C++写个程序,如何判断一个操作系统是16位还是3 ... -
找出连续最长的数字串(百度面试)
2012-08-09 15:15 1152int maxContinuNum(const char*in ... -
顺序栈和链栈
2012-08-06 10:01 803顺序栈:话不多说直接上代码 #include ... -
队列的数组实现和链表实现
2012-08-05 16:20 1028话不多少,数组实现上代码: #include<i ... -
KMP算法详解
2012-08-02 21:40 891KMP算法: 是在一个“主文本字符串” ... -
字符串的最长连续重复子串
2012-08-01 15:05 9784两种方法: 循环两次寻找最长的子串: <方法一> ... -
字符串的循环移位
2012-07-31 16:52 981假设字符串:abcdefg 左循环两位:cdefgab 右 ... -
一次谷歌面试趣事(转)
2012-07-31 15:26 775很多年前我进入硅谷 ... -
约瑟夫环问题(循环链表)
2012-07-30 21:31 1297题目描述:n只猴子要选大王,选举方法如下:所有猴子按 1, ... -
面试之单链表
2012-07-30 20:18 7311、编程实现一个单链表的建立/测长/打印。 ... -
多重继承内存地址问题
2012-07-30 15:55 731[cpp] view plaincopy ...
相关推荐
在编程领域,字符串操作是常见的任务之一,尤其是在算法设计和数据处理中...通过理解并掌握这种动态规划解决方案,可以扩展到处理更复杂的问题,比如寻找多个字符串的最大公共子串或者最长公共子序列(不连续的子串)。
最大公共子串是指在两个字符串中都出现的最长的连续子串。该算法的基本思想是通过构建一个二维布尔矩阵,其中矩阵的每个元素表示对应位置的字符是否相等。如果相等,则值为true,否则为false。然后,通过遍历这个...
描述中的“输出字符串的子串”进一步确认了这个任务是关于获取一个字符串的所有可能的连续子序列。 在提供的代码片段中,我们看到一个名为`splitString`的方法,它接受两个参数:`arr_length`(表示子串的目标长度...
在编程领域,最长公共子串(Longest Common Substring,LCS)问题是一个经典的问题,它寻找两个或多个字符串中的最长连续子序列,这个子序列同时存在于所有字符串中。在这个问题中,我们专注于PHP如何解决两个字符串...
在处理中文字符串时,若需要寻找其中出现频率最高的子串,可通过编程算法实现这一功能。下面将详细阐述如何通过编写PHP代码来找出中文字符串中出现次数最多的子串。 首先,需要理解中文字符串的构成。在计算机处理...
在Python编程中,寻找最长非重复子串是一个常见的字符串处理问题。这个问题的目的是找到一个字符串中最长的子串,这个子串在原字符串中只出现一次。这里介绍了一种使用滑窗切片和字典来解决此问题的方法。 首先,...
"在字符串中找出连续最长的数字串并输出最长的字符串长度"这个问题是字符串处理中的一个经典实例,它涉及到字符串遍历、模式匹配和动态规划等概念。 首先,我们需要理解问题的核心:在给定的字符串中寻找连续的数字...
在JavaScript编程中,有时我们需要找出两个字符串之间的最长公共子串,这是字符串处理中一个常见的问题。最长公共子串是指在两个或多个字符串中都存在的最长的连续字符序列。本篇文章将详细讲解如何通过自定义函数来...
总之,通过上述方法,我们可以在JavaScript中实现一个查找两个字符串最大公共子串的函数。该函数的算法思路是通过简单的双指针遍历实现的,适用于基本的字符串匹配需求。对于更复杂或性能要求更高的场景,建议采用...
Manacher的算法是一种优化后的动态规划方法,专门针对寻找字符串中的最长回文子串,但在适当修改后,也可以用于求解最长重复子串。它利用了字符串的对称性,减少了重复计算,提高了效率。 无论采用哪种方法,都...
在编程领域,寻找字符串中重复出现且最长的子字符串是一个常见的字符串处理问题。这个任务涉及到字符串操作、算法设计以及可能的动态规划或滑动窗口等技术。以下将详细阐述这个问题的解决方案及其相关知识点。 首先...
- **不小于k个字符串中的最长子串**:在一组字符串中寻找同时出现在至少k个字符串中的最长子串。 - **每个字符串至少出现两次且不重叠的最长子串**:寻找在每个字符串中至少出现两次,且不重叠的最长子串。 - **出现...
后缀数组可以看作是一系列字符串后缀的排序,其中每个元素都是原字符串的一个后缀,按字典序排列。相比于后缀树,后缀数组在实现上更为简单,同时在时间和空间效率上也有良好的表现。 ### 基本定义 后缀数组是将一...
最长公共子串是指在两个字符串中都连续出现且长度最长的子串,与最长公共子序列(Longest Common Subsequence,LCS)不同,它要求子串必须是原始字符串的连续片段。 为了解决最长公共子串问题,可以采用穷举法,这...
- PKU3693和SPOJ687题目都是关于找出重复次数最多的连续重复子串,这可能需要遍历整个字符串,维护当前子串及其出现次数的状态。 7. **长度不小于k的公共子串的个数**: - PKU3415要求计算所有长度不小于k的公共...
该问题主要涉及到两个或多个字符串之间共同拥有的最长连续字符序列的寻找。这种应用场景广泛存在于文本比对、生物信息学中的基因序列比对等多个领域。 #### 二、问题描述 题目要求编写一个C++程序来找到两个给定...
在编程领域,"最长子串"通常是指在一个或多个字符串中找到共享的、最长的连续字符序列。这个概念广泛应用于文本处理、数据挖掘以及算法竞赛等场景。在本例中,我们将探讨如何编写一个程序来找出给定字符串集合中的...
9. **滑动窗口最大/最小值问题**:在处理字符串时,滑动窗口经常用于寻找特定条件下的子串,如找到字符串中最长的连续0或找到子串中的最大/最小字符。 10. **字符串分词与词性标注**:在自然语言处理中,字符串算法...
假设有一个字符串S,我们的任务是找出其中最长的重复子串,即在S中至少出现两次的最长连续子序列。这个问题不仅涉及到字符串匹配的基本概念,还可能涉及到数据结构和算法的高级应用。 ### 二、数据结构设计 为了...