求给定字符串重复最长的子串
来源:互联网 发布:吉利知豆d2补贴后价格 编辑:程序博客网 时间:2024/05/18 01:54
1、问题
输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它。
2、解析
例如“yyabcdabjcabceg”,输出应该为abc和3。
可以将字符串yyabcdabjcabceg分解成如下子串
yyabcdabjcabceg
yabcdabjcabceg
abcdabjcabceg
.......
eg
g
1)从最大子串开始正序查找,然后逆序查找,如果两次查找位置不一致说明存在重复子串。
2)利用后缀数组求解
3、方法一
#include <iostream>
#include<string>
using namespace std;
int main()
{
string str,tep;
cout<<"请输入字符串"<<endl;
cin>>str;
for(int i=str.length()-1;i>1;i--)
{
for(int j=0;j<str.length();j++)
{
if(j+i<=str.length())
{
size_t t=0;
size_t num=0;
tep=str.substr(j,i);//从大到小取子串
t=str.find(tep);//正序查找,从0开始查找字符串tep,返回tep的位置
num=str.rfind(tep);//逆序查找,从0开始从后向前查找字符串,返回tep的位置
//从前后分别查找字符串,正常情况下是刚开始的长串找不到的,到后来的短串前后才会重
if(t!=num)//如果两次查找位置不一致说明存在重复子串
{
cout<<tep<<" "<< t+1<<endl;//输出子串及位置
return 0;//因为是从长到短,所以再短的也就不找了
}
}
}
}
return 0;
}
4、方法二
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAXCHAR 5000 //最长处理5000个字符
char c[MAXCHAR], *a[MAXCHAR];
int comlen(char *p, char *q)
{
int i = 0;
while(*p && (*p++ == *q++))
++i;
return i;
}
/**
* 比较字符串
*/
int pstrcmp(const void *p1, const void *p2)
{
return strcmp(*(char* const *)p1, *(char* const*)p2);
}
int main()
{
char ch;
int n = 0;
int i, temp;
int maxlen = 0, maxi = 0;
printf("Please input your string:\n");
while((ch = getchar()) != '\n')
{
a[n] = &c[n];
c[n++] = ch;
}
c[n] = '\0';
qsort(a, n, sizeof(char*), pstrcmp);
for(i = 0; i < n - 1 ;++i)
{
temp = comlen(a[i], a[i+1]);
if(temp > maxlen)
{
maxlen = temp;
maxi = i;
}
}
printf("%.*s\n",maxlen, a[maxi]);
return 0;
}
- 求给定字符串重复最长的子串
- 求给定字符串中最长重复子串
- 01_求给定字符串最长重复子串
- 算法题目二:寻找最长重复子序列(4) 求给定字符串重复最长的子串
- 求给定的某一个字符串中的最长的没有重复字符的子串的长度
- leetcode第三题:求给定字符串中最长无重复子串的长度
- 求字符串的最长重复子串
- 求字符串的最长重复子串
- 求字符串的最长重复子串
- 给定一个字符串,输出最长的重复子串
- 给定一个字符串,求出其最长的重复子串
- 给定一个字符串,求出其最长的重复子串。
- 给定一个字符串,求出其最长的重复子串。
- 给定一个字符串,输出最长的重复子串
- 给定一个字符串,求出其最长的重复子串
- 给定一个字符串,求出其最长的重复子串。
- 求给定字符串的最长回文子串
- 求给定两字符串的最长相同子串
- HDU 1049 Climbing Worm
- 瀑布流网页中遇到的问题和解决方法
- C#获取可执行文件的路径
- Ubuntu 12.04 下 Openstack Essex安装过程详解 (转给自己)
- HDU 1052 Tian Ji -- The Horse Racing
- 求给定字符串重复最长的子串
- 新型的按键扫描程序,仅三行程序
- 类的组合的应用
- 2010年华为上机笔试二(高精度整数加法)
- 伸展树(Splay Tree)小结
- servlet多线程安全问题(转)
- xcode生成文件路径
- 学习笔记-sed(一)
- static和const的初始化、、