除正则表达式之外在字符串中查找重复模式的方法

时间:2016-09-16 14:37:01

标签: string pattern-matching

如果它存在于字符串中,我需要找到重复的模式,或者如果重复的模式不存在则返回一个字符串。

示例:

  • String s =“abcabc”;重复模式是abc

  • String s =“aba”;重复模式是aba

  • String s =“abbbbbbba”;重复模式是abbbbbbba;

  • String s =“abcdabcdabcd”;重复模式是abcd;

如果您参考链接我们可以使用正则表达式来解决这个问题 Finding a repeated pattern in a string。 但除了正则表达式之外还有其他方法可以让它解决吗?

1 个答案:

答案 0 :(得分:1)

如果有图案=>它的长度必须除以字符串长度

for (int i =2;i < sqrt(length(s));i++)
{
   if(length(s) % i == 0)
{
 string pattern = s.substring(0,i);
 bool isPatern = true;
 int j = i +1;
 while(isPatern && j<length(s))
 {
    if(s.substring(j,i)==pattern)
     { 
        j = j+i;
     }
    else
     {
        isPatern  =false;
     }
 }
  if (isPattern) return pattern;
}

}

请注意,这将返回最小的模式,如果您想要最长的模式for (int i =length(s)/2;i > sqrt(length(s));i--)