在字符串中查找最长重复子串的探讨
2006-07-21 16:54
239 查看
写一个函数,找出一个字符串中最长的重复子串。“t1t1”结果就是t1."cabcabca"结果就是cab或者abc或者bca。
#include <stdio.h>
#define BUF_MAX 1000
int index; //子串起始位置
int len;//子串长度
void str_search(const char *str)
{
int i=0;
while(str[i]!='/0') ++i;
int strlen=i;
for(i=strlen/2;i>0;--i)
{
int zeronum=0;
for(int j=i;j<strlen;++j)
{
if (str[j]==str[j-i])
{
++zeronum;
if (zeronum==i)
{
index=j-2*i+1;
len=i;
return;
}
}
else
{
zeronum=0;
}
}
}
}
int main()
{
char str[BUF_MAX];
scanf("%s",str);
str_search(str);
printf("%d:%d/n",index,len);
}
说明:
假设str中有长度为m的连续子串,
则字符串移动m个位置后,与原串
s0 s1 s2 s3 ... sm-1 sm sm+1 sm+2 ..... sn
s0 s1 s2 .............sn
一定有连续m个位置的字符是相等的;
如果有多个解,只返回第一个;
#include <stdio.h>
#define BUF_MAX 1000
int index; //子串起始位置
int len;//子串长度
void str_search(const char *str)
{
int i=0;
while(str[i]!='/0') ++i;
int strlen=i;
for(i=strlen/2;i>0;--i)
{
int zeronum=0;
for(int j=i;j<strlen;++j)
{
if (str[j]==str[j-i])
{
++zeronum;
if (zeronum==i)
{
index=j-2*i+1;
len=i;
return;
}
}
else
{
zeronum=0;
}
}
}
}
int main()
{
char str[BUF_MAX];
scanf("%s",str);
str_search(str);
printf("%d:%d/n",index,len);
}
说明:
假设str中有长度为m的连续子串,
则字符串移动m个位置后,与原串
s0 s1 s2 s3 ... sm-1 sm sm+1 sm+2 ..... sn
s0 s1 s2 .............sn
一定有连续m个位置的字符是相等的;
如果有多个解,只返回第一个;
相关文章推荐
- 在字符串中查找连续重复的最长子串的C++实现
- Python简单实现查找一个字符串中最长不重复子串的方法
- 字符串操作问题:查找给定字符串中,连续重复且长度最长的第一个子串
- 在字符串中查找最长重复子串
- 查找字符串中最长无重复字符的子串
- 查找字符串中无重复最长子串的长度
- 自己写的一个后缀树算法查找一个字符串的最长重复子串
- 查找字符串中最长重复字符的子串
- 【算法题】查找字符串中无重复最长子串的长度
- 【编程珠玑】第十五章--字符串:用后缀数组查找最长不重叠的重复子串
- 华为OJ 公共字串计算&&查找两个字符串a,b中的最长公共子串
- 求字符串中不重复的最长子串的长度
- 后缀数组求字符串最长重复子串
- 华为OJ——查找两个字符串a,b中的最长公共子串
- 找出字符串最长不重复子串,输出长度
- 求字符串的最长不重复子串
- 求字符串中最长无重复字符的子串
- 求字符串中不重复字符的最长子串
- 找工作知识储备---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)