如何判断一个字符串是否是其所含的子串的重复。
abcabcabcabc 通过程序可以得到重复的子串abc
qweryusdfgfgh 通过程序可以得到不包含重复子串返回null
ababababababa 通过程序可以得到重复的子串ab 展开
取字符串长度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中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
参考资料来源:百度百科-字符串
2. 对n做因子分解,得到因子数组v;
3. 遍历v,
3.1. 用每个因子v[i],对字符串进行切分,
3.2. 判断切分得到的所有子串是否相同,是就记录子串
推荐于2016-08-14
2. 对n做因子分解,得到因子数组v;
3. 遍历v,
3.1. 用每个因子v[i],对字符串进行切分,
3.2. 判断切分得到的所有子串是否相同,是就记录子串
边界问题:因子要包括1但不包括n。
#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;
}