others - java如何检查字符串是否有重复的模式?

我最近在面试中被问到这个问题:

给定输入字符串检查是否有重复的模式和 return true 或 false 。 例如:"abbaabbaabbaabba""abba"的重复模式


private boolean checkPattern(String input) {



}



我们如何使用正则表达式和没有正则表达式来解决它? 我对 正规表达式 和没有 正规表达式的方法都有兴趣。

时间:

没有 正规表达式,你就必须遍历每个可能的子字符串,从索引 0开始,并检查它是否重复。 要检查它是否重复你只需检查字符串中的每个 pattern.length() 个字符数以查看它是否为模式 比如,它看起来像这样


public boolean checkPattern(String str) {


 String pattern ="";


 for (int i = 0; i <str.length()/2; i++) {


 pattern += str.charAt(i);


 if (str.length() % pattern.length() == 0 && isRepeating(str, pattern)) {


 return true;


 }


 }


 return false;


}



public boolean isRepeating(String str, String pattern) {


 String leftover = str;


 int currIndex = leftover.indexOf(pattern);


 while (currIndex == 0) {


 if(currIndex + pattern.length() == leftover.length()) {


 return true;//you have reached the last possible instance of the pattern at this point


 }


 leftover = leftover.substring(currIndex + pattern.length());


 currIndex = leftover.indexOf(pattern);


 }


 return false;


}



同样,Pattern 在字符串中重复的最大长度是 str.length()/2

您可以在另一个变量中获取子字符串,并为初始字符串运行循环,比较子字符串的第一个元素

如果子字符串的条件匹配,则匹配。

如果子字符串中的任何前导字符不匹配,则退出子字符串条件的If

在任意位置创建带有所有子字符串的Trie 。 如果您最后添加一个单词两次,即之前添加的单词,则添加,这意味着它具有重复模式。

如果您希望模式格式比任何长度更大,请更改您的代码以仅存储比该长度更大的单词。 或者单个字符也可以是重复的模式。

...