1. partition labels
1.1. 컴퓨팅적 사고
(1)LastIdx[알파벳을 아스키코드로 표현된 값] = 현재 위치의 값을 구해줍니다.
예) ‘c’ 일 경우 LastIdx[‘c’-‘a’=2] = 현재 위치(i)
(2) S문자열을 모두 수행하면서 나오는 알파벳들의 위치와 비교하여 최대로 위치해있는 인덱스값을 구해줍니다.
(3) 만약 S문자열값을 모두 수행하면서 진행되는값이 S문자열에 최대로 위치해있는 인덱스값과 같을 경우
파티셔닝 포인터를 현재 진행되는값+1로 갱신해줍니다. 이것이 뜻하는 바는 하나의 파티션이 생성되어 다음 파티션의 첫번째 인덱스값으로 초기화 시켜주는것을 뜻합니다.
그리고, 현재까지 진행된 i번째 위치에서 - 파티션된 위치 + 1 을 처리합니다. 이렇게 처리하면 현재까지 하나의 파티션의 길이값을 구할 수 있습니다.
즉, (최대로 진행된 위치 - 시작된 위치) + 1를 뜻합니다.
(4) 2,3번을 차례대로 진행하면 해당되는 최대길이의 파티션을 나눌 수 있게됩니다.
시간복잡도
O(N)
1.2. 소스코드
1 | public class leetcode_PartitionLabels_kgh { |