
조건:
- 1 <= s.length <= 104
- s consists of lowercase English letters.
의역: 문자열 s가 주어질 때 해당 문자열의 일부분(substring)의 반복으로 이루어질 수 있으면 true 아니면 false를 반환해라. (혹은 해당 문자열이 반복되는 패턴으로 구성되어 있으면 true 아니면 false로 해석해도 좋을 것 같다.)

"abab" 는 "ab"의 반복으로 이루어질 수 있으므로 true

"abc"는 "a", "b", "c", "ab", "bc" 의 반복으로는 만들 수 없기 때문에 false

"abcabcabcabc"는 "abc"의 반복으로 만들 수 있기 때문에 true
풀이:
1. 모든 경우 체크 (브루트 포스)
class Solution {
// 시간복잡도 O(nlog n) // 공간복잡도 O(1)
private boolean isSubsequence(String targte, String s){
StringBuilder tmp = new StringBuilder("");
// targte을 반복하여 이어붙여서 s와 같다면 true 아니면 false
for(int i=0;i<s.length()/targte.length();i++){
tmp.append(targte);
}
if(tmp.toString().equals(s)) return true;
else return false;
}
public boolean repeatedSubstringPattern(String s) {
char sArray[] = s.toCharArray();
String target = "";
// ex "abcde" 라면 "a" "ab"순으로 확인
// 만약 target의 문자열의 길이가 절반을 넘어가면 false 이므로 절반까지만 반복
for(int i=0;i<sArray.length/2;i++){
target +=sArray[i];
if(isSubsequence(target,s))
return true;
}
return false;
}
}
1-1. 좀더 개선한 버전
class Solution {
// 시간 복잡도 O(log n) 공간 복잡도 O(1);
public boolean repeatedSubstringPattern1(String s) {
int length = s.length();
String copy = "";
for(int i=1;i<=s.length()/2;i++){
if(length%i==0){
copy = s.substring(0,i);
copy = copy.repeat(length/i);
if(copy.equals(s))
return true;
}
}
return false;
}
}
2. indexof() 함수 이용 (만약 일정한 패턴으로 해당 문자열이 이루어져 있다면 중간에 반복되는 패턴이 나올 수 있음을 이용)
class Solution {
// indexOf() 함수의 시간복잡도는 O(n) 공간 복잡도는 O(1)
public boolean repeatedSubstringPattern2(String s){
return (s+s).indexOf(s,1)<s.length();
}
}
indexof()함수의 시간복잡도에 관한 글: https://stackoverflow.com/questions/70902661/does-indexof-in-js-search-all-the-elements-of-an-array-to-execute
링크: https://leetcode.com/problems/repeated-substring-pattern/description/
'PS > Easy' 카테고리의 다른 글
| 476. Number Complement (해석 + 풀이) (0) | 2023.01.11 |
|---|---|
| 463. Island Perimeter (해석 + 풀이) (0) | 2023.01.10 |
| 455. Assign Cookies (해석 + 풀이) (0) | 2023.01.05 |
| 448. Find All Numbers Disappeared in an Array (해석 + 풀이) (0) | 2023.01.04 |
| 520. Detect Capital (해석 + 풀이) (1) | 2023.01.03 |