floatFirstTOC: right
๐ฅ๏ธย ์์ํ๋ฉฐ
s
๋ฌธ์์ด์ p
๋ฌธ์์ด์ด ํฌํจ๋์ด ์๋, ์ฆ ์ ๋๊ทธ๋จ์ ์์์ ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ๋ค. ์ฌ๊ธฐ์ p
์ ์์๋ ๊ณ ๋ คํ์ง ์๋๋ค. ย
๋ฌธ์ ์
s = "cbaebabacd"
์ p = "abc"
๋ก ์์๋ฅผ ๋ค์ด๋ณด์.- ์ด๋ฐ
i
๊ฐp_length
๋ณด๋ค ์์ ๋๊น์ง: - ์ฌ๊ธฐ์
"cba"
์"abc"
๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ 0์ด res์ ์ถ๊ฐ๋จ
if s_count == p_count: res.append(i - p_length + 1)
์ if๋ฌธ์ ์ง๋์น๊ณ ์๋ ๊ตฌ๋ฌธ์ ๊ฑธ๋ฆฐ๋ค.
s_count
์นด์ดํฐ์ p_count
์นด์ดํฐ๊ฐ ๊ฐ๋ค๋ฉด res
์ ์์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ค.ย
- ์ดํ ์ด๋ฐ
i
๊ฐp_length
๋ณด๋ค ํฌ๋ฉด : - ์ฌ๊ธฐ์
i = 3
์ด๊ณp_length = 3
์ด๋ฏ๋กs[i - p_length]
๋"c"
s_count
์"c"
์ ๋ํ ๋น๋๋ฅผ ๊ฐ์์ํจ๋ค.
if s_count[s[i - p_length]] == 1: # ์ด์ ๋ฃจํ์ ๋งจ ์ผ์ชฝ ๋ฌธ์ ์ญ์ del s_count[s[i - p_length]] else: s_count[s[i - p_length]] -= 1
์ฌ๋ผ์ด์ค ์๋์ฐ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด
s_count[s[i - p_length]] == 1
์กฐ๊ฑด์ผ๋ก ์ด์ ๋ฃจํ์์์ ๋งจ ์ผ์ชฝ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๋๋ก ํ๋ค. ๋ํ ์ค๋ณต ๋ฌธ์์ด์ด ๋ค์ด๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก ๋ง์ผ if๋ฌธ์ ๊ฑธ๋ฌ์ง์ง ์์๋ค๋ฉด ๊ทธ๋ฅ -1 ์ฒ๋ฆฌ๋ฅผ ํด ์ค๋ค.
ย
ย
โ๏ธย Python
from collections import Counter from typing import List class Solution: def findAnagrams(self, s: str, p: str) -> List[int]: res = [] p_count = Counter(p) s_count = Counter() p_length = len(p) for i in range(len(s)): s_count[s[i]] += 1 if i >= p_length: if s_count[s[i - p_length]] == 1: del s_count[s[i - p_length]] else: s_count[s[i - p_length]] -= 1 if s_count == p_count: res.append(i - p_length + 1) return res if __name__ == "__main__": sol = Solution() print(sol.findAnagrams("cbaebabacd", "abc")) # [0, 6]
ย
๋๊ธ