给定一个非空字符串,检查它是否可以通过取它的子串并将多个该子串附加在一起构造出来。你可以假设给定的字符串仅包含小写英文字母,并且其长度不超过10000。
例如1: 输入:"abab" 输出:True 说明:它是子串"ab"两次。
例如2: 输入:"aba" 输出:False 例如3: 输入:"abcabcabcabc" 输出:True 说明:它是子串"abc"四次。(子串"abcabc"两次)
我在一个在线编程网站上找到了上述问题,网址在这里。我提交了下面的答案,在自定义测试用例中可以运行,但在提交时会出现超时异常。我尝试了其他正则表达式模式匹配的方法,但是预期会需要更多时间,并且也会失败。
例如1: 输入:"abab" 输出:True 说明:它是子串"ab"两次。
例如2: 输入:"aba" 输出:False 例如3: 输入:"abcabcabcabc" 输出:True 说明:它是子串"abc"四次。(子串"abcabc"两次)
我在一个在线编程网站上找到了上述问题,网址在这里。我提交了下面的答案,在自定义测试用例中可以运行,但在提交时会出现超时异常。我尝试了其他正则表达式模式匹配的方法,但是预期会需要更多时间,并且也会失败。
public class Solution {
public boolean repeatedSubstringPattern(String str) {
int substringEndIndex = -1;
int i = 0;
char startOfString = str.charAt(0);
i++;
char ch;
while(i < str.length()){
if((ch=str.charAt(i)) != startOfString){
//create a substring until the char at start of string is encountered
i++;
}else{
if(str.split(str.substring(0,i)).length == 0){
return true;
}else{
//false alarm. continue matching.
i++;
}
}
}
return false;
}
}
有没有想法,我花费了太多时间在哪里。