소문자로 된 문자열 S가 있다고 가정하고 이러한 문자는 동일한 문자의 연속적인 그룹을 형성합니다. 따라서 S와 같은 문자열이 "abbxxxxzyy"와 같을 때 그룹은 "a", "bb", "xxxx", "z" 및 "yy"입니다. 그룹은 3자 이상의 문자가 있는 경우 큰 그룹이 됩니다. 우리는 모든 대규모 그룹의 시작 위치와 끝 위치를 원합니다.
따라서 입력이 "abcdddeeeeaabbbcd"와 같으면 출력은 [[3,5],[6,9],[12,14]]
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- ans :=새 목록
- csum :=0
- 각, b에 대해 연속 문자로 된 문자 그룹을 만들려면 do
- grp :=그룹화된 항목 목록
- grp의 크기가 3이면
- (csum,csum + grp 크기 - 1)을 사용하여 목록을 ans에 삽입
- csum :=csum + grp 크기
- 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
from itertools import groupby class Solution: def largeGroupPositions(self, S): ans = [] csum = 0 for a, b in groupby(S): grp = list(b) if len(grp) >= 3: ans.append([csum, csum+len(grp)-1]) csum+=len(grp) return ans ob = Solution() print(ob.largeGroupPositions("abcdddeeeeaabbbcd"))
입력
"abcdddeeeeaabbbcd"
출력
[[3, 5], [6, 9], [12, 14]]