# \#459 Repeated Substring Pattern
## *給定一字串s, 判斷s是否由某一子字串重複多次而組成*
## Log
- build 20210829 by syhuang
## 神解
- 令S1=S+S
- 令S2 = S1去掉頭尾兩個字元
- 當S出現在S2的時候就表示S符合題意
- leetcode submit runtime 56%, memory 86%
```javascript=
var repeatedSubstringPattern = function(s) {
if(s.length<2) return false;
const s1 = s+s;
const s2 = s1.substr(1,s1.length-2);
return s2.indexOf(s) != -1;
};
```
## 初見2
- 以初見為基礎, 改善迴圈裡的判斷條件:
- 每次取tmpSubStr後, 抓下一個tmpSubStr出現的位置, 如果該位置是s.length的因數, 才有可能組成重複的子字串
- 後續判斷同初見
- leetcode submit runtime 5%, memory 41%
```javascript=
var repeatedSubstringPattern = function(s) {
if(s.length < 2) return false;
let tmpSubStr = '';
let sLen = s.length;
let result = false;
for(let i=1; i<=sLen/2 && !result; i++){
tmpSubStr = s.substr(0,i);
let index = s.indexOf(tmpSubStr,i);
if(index<0 || sLen%index != 0) continue;
else if(s.replaceAll(tmpSubStr,'')!='') continue;
else result = true;
}
return result;
};
```
## 初見
- 跑迴圈紀錄每個可能的子字串, 並把原本的字串用子字串tmpSubStr來做取代成空字串, 如果取代後s變為空字串, 就表示符合題意
- edge case s.length > 1
- leetcode submit runtime 超過限制
```javascript=
var repeatedSubstringPattern = function(s) {
if(s.length < 2) return false;
let tmpSubStr = '';
let result = false;
for(i=0; i<s.length/2; i++){
tmpSubStr = s.substr(0,i+1);
if(s.replaceAll(tmpSubStr,'')==''){
result = true;
break;
}
}
return result;
};
```
## 備註
## 參考
- [神解出處](https://leetcode.com/problems/repeated-substring-pattern/discuss/94334/Easy-python-solution-with-explaination)
###### tags: `leetcode`, `leetcode-easy`, `string`