[LeetCode] 763. Partition Labels

Updated:

763. Partition Labels

partition

λ¬Έμžμ—΄μ„ μ΅œλŒ€ν•œ 많이 μͺΌκ°œμ„œ μͺΌκ°  덩어리 μ•ˆμ— μ΅œλŒ€ν•œ 각각의 μ•ŒνŒŒλ²³μ΄ 많이 있게 ν•΄μ•Όν•œλ‹€.

맀 μˆœκ°„ μˆœκ°„ μ΅œμ„ μ„ λ‹€ν•˜λŠ” νƒμš• μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λ©΄ λœλ‹€.

λ¨Όμ € S λ₯Ό S 의 첫 번째 μ•ŒνŒŒλ²³μ΄ λ§ˆμ§€λ§‰μœΌλ‘œ λ‚˜μ˜€λŠ” μˆœκ°„κΉŒμ§€ μͺΌκ°œ partition 을 λ§Œλ“ λ‹€.

κ·Έ λ‹€μŒ partition μ—μ„œ 두 번째 μ•ŒνŒŒλ²³μ΄ λ§ˆμ§€λ§‰μœΌλ‘œ S μ—μ„œ λ‚˜μ˜€λŠ” μˆœκ°„μ„ μ°Ύμ•„ S의 μ²˜μŒλΆ€ν„° κ·Έκ³³κΉŒμ§€λ₯Ό partition 에 이어 뢙인닀.

partition 의 λ§ˆμ§€λ§‰ μ•ŒνŒŒλ²³ κΉŒμ§€ λ°˜λ³΅ν•œλ‹€. S κ°€ 없을 λ•Œ κΉŒμ§€ λ°˜λ³΅ν•˜λ©΄ 닡을 ꡬ할 수 μžˆλ‹€.

주어진 μ˜ˆμ‹œλ₯Ό 톡해 과정을 μ‚΄νŽ΄λ³΄λ©΄ μ²˜μŒμ—” partition = ababcbaca, S = defegdehijhklij 둜 λ‚˜λˆŒ 수 μžˆλ‹€.

μ΄λ•Œ partition에 μ–΄λ–€ μ•ŒνŒŒλ²³λ„ S 에 μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 더 이상 이어뢙일 ꡬ간이 μ—†λ‹€.

λ‹€μŒμœΌλ‘œ partition = defegd, S = ehijhklij 둜 λ‚˜λˆŒ 수 μžˆλ‹€. μ΄λ•Œ partition 에 μžˆλŠ” e κ°€ S 에 있기 λ•Œλ¬Έμ— 이어 뢙인닀.

κ·Έλ ‡κ²Œ 되면 partition = defegde, S = hijhklij κ°€ λœλ‹€. λ‚˜λ¨Έμ§€ S 도 λ˜‘κ°™μ΄ λ°˜λ³΅ν•˜λ©΄ λœλ‹€.


from typing import List


class Solution:
	def partitionLabels(self, S: str) -> List[int]:
		output = []
		idx = 0
		while S:
			find_alpha = S[0]
			for i, val in enumerate(S[::-1]):
				if val == find_alpha:
					idx = len(S) - i - 1
					break

			partition = S[:idx + 1]
			S = S[idx + 1:]

			p_idx = 0
			while p_idx < len(partition):
				add_idx = -1
				for i, S_val in enumerate(S[::-1]):
					if partition[p_idx] == S_val:
						add_idx = len(S) - i - 1
						break

				if add_idx >= 0:
					partition += S[:add_idx + 1]
					S = S[add_idx + 1:]
				p_idx += 1

			output.append(len(partition))
		return output

Categories:

Updated:

Leave a comment