如何判断一个字符串是否是其所含的子串的重复。

例如:abcabcabcabc通过程序可以得到重复的子串abcqweryusdfgfgh通过程序可以得到不包含重复子串返回nullababababababa通过程序可以得... 例如:
abcabcabcabc 通过程序可以得到重复的子串abc
qweryusdfgfgh 通过程序可以得到不包含重复子串返回null
ababababababa 通过程序可以得到重复的子串ab
展开
 我来答
帐号已注销
2020-10-25 · TA获得超过77.1万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:167万
展开全部

取字符串长度n;对n做因子分解,得到因子数组v;遍历v,用每个因子v[i],对字dao符串进行切分,判断切分得到的所有子串是否相同,是就记录子串。

边界问题:因子要包括1但不包括n。

如果“一个字符串”全部是英文字符的话,只要开一个chars[128];的哈希表,每个在其中出现的字符按它的ascii值,将相应的元素置为1;扫描“另一个字符串”,检测每一个字符,在数组中对应元素的值是否为1。若这个串里的对应元素值全部为1,则是“包含另一个字符串所有的字符”。

扩展资料:

字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1a2···an”(n>=0)。它是编程语言中表示文本的数据类型。在程序设计中,字符串(string)为符号或数值的一个连续序列,如符号串(一串字符)或二进制数字串(一串二进制数字)。

通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。

参考资料来源:百度百科-字符串

470529srzh
2015-10-25 · TA获得超过5940个赞
知道小有建树答主
回答量:1213
采纳率:83%
帮助的人:64.3万
展开全部
1. 取字符串长度n;
2. 对n做因子分解,得到因子数组v;
3. 遍历v,
3.1. 用每个因子v[i],对字符串进行切分,
3.2. 判断切分得到的所有子串是否相同,是就记录子串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2016-08-14
展开全部
1. 取字符串长度n;
2. 对n做因子分解,得到因子数组v;
3. 遍历v,
3.1. 用每个因子v[i],对字符串进行切分,
3.2. 判断切分得到的所有子串是否相同,是就记录子串

边界问题:因子要包括1但不包括n。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28b4182
2012-01-06 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1850万
展开全部
#include<stdio.h>
#include<string.h>
const int maxint=1000005;
char s[maxint];
int fail[maxint],len;
void find_next()
{
int j,i;
fail[0]=-1;
for(j=1;j<len;j++)
{
for(i=fail[j-1];i>=0&&s[i+1]!=s[j];i=fail[i]);
if(s[i+1]==s[j])
fail[j]=i+1;
else
fail[j]=-1;
}
}
int main()
{
int t,x,j;
while(scanf("%s",s)!=EOF&&strcmp(s,".")!=0)
{
t=1;
len=strlen(s);
find_next();
j=fail[len-1];

if(len%(len-j-1)==0)
{
for(j++;j<len;j++)
{
printf("%c",s[j]);

}
puts("");
}
else
{
puts("NO");
}
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式