문제
https://leetcode.com/problems/repeated-substring-pattern/description/
입력
s: String = 문자
1 <= s.count <= 10,000
결과
ans: Bool = 반복 문자열 패턴인지 true / false
해석
일단 s.count 가 2보다 작으면 반복 문자열이 될 수 없으므로 false를 리턴
1) 2s = s를 이어 붙힌 것
2) 2s에서 앞과 뒤를 제거한다.
3) 이후 문자열에서 s를 찾을 수 있다면 반복가능한 문자열이다.
앞과 뒤를 제거한 이유는 원형 수열과 같이 연결해주기 위해서이다.
s = abaaba 라고 가정하고 위 과정을 진행해보자.
- 2s 만들기
- 2s = abaaba abaaba
- 앞뒤 제거
- 최종 문자열 = baabaabaab
- 문자열 찾기
- baabaabaab
길이 3으로 나누면 반복 가능한 문자열이라는 뜻과 같다.
코드
import Foundation
extension String {
subscript(_ index: Int) -> String {
let startIndex = self.startIndex
return String(self[self.index(startIndex, offsetBy: index)])
}
subscript(_ range: Range<Int>) -> String {
let startIndex = self.startIndex
let from = self.index(startIndex, offsetBy: range.startIndex)
let to = self.index(startIndex, offsetBy: range.endIndex)
return String(self[from..<to])
}
}
class Solution {
func repeatedSubstringPattern(_ s: String) -> Bool {
let l = s.count
let half = l / 2
if l < 2 {
return false
}
return (s[1..<l] + s[0..<l-1]).contains(s)
}
}
'PS > LeetCode' 카테고리의 다른 글
[LeetCode] 3. Longest Substring Without Repeating Characters (0) | 2024.10.24 |
---|---|
[LeetCode] 647. Palindromic Substrings (0) | 2024.10.15 |