one line of code at a time
[leetcode] 1456. Maximum Number of Vowels in a Substring of Given Length 파이썬 코드 본문
leetcode
[leetcode] 1456. Maximum Number of Vowels in a Substring of Given Length 파이썬 코드
oloc 2024. 8. 13. 06:14https://leetcode.com/problems/maximum-number-of-vowels-in-a-substring-of-given-length/description/
문자열 s에서 길이가 k인 substring 중 모음(vowel) 개수가 최대일 때 그 최댓값을 구하는 문제다.
s = "abciiidef", k = 3라고 할 때 iii 가 모음 3개를 가지므로 정답은 3이다.
k의 길이가 fixed 되어 있으므로 sliding window로 풀면 된다.
그런데 살짝 헷갈렸던 게 window를 한 칸 씩 옮길 때 최댓값이 있으면 그 값을 업데이트 해줘야 하는데
그 업데이트를 할 때 (그 다음 값이 모음이면 +1, 그 이전 값이 모음이었으면 -1) 그 이전값을 +1 하거나 -1 해줘야 한다는 것이다. 최댓값을 +1, -1 해주는 것이 아니라.
그래서 temp, prev, vowelCount 이렇게 변수를 3개를 썼다.
vowelCount는 최댓값을 담는 변수이고, temp는 업데이트를 해주는 값이고, prev는 이전값이다.
window를 움직였을 때 +1 하거나 -1한 값인 temp와 vowelCount를 비교해줘서 더 큰 값이 새로운 최댓값이 된다.
class Solution(object):
def maxVowels(self, s, k):
vowels = set('aeiou')
vowelCount = 0
for i in range(k):
if s[i] in vowels:
vowelCount += 1
# print(vowelCount)
prev = vowelCount
for i in range(len(s) - k):
temp = prev
start, end = s[i], s[i+k]
if s[i+k] in vowels:
temp += 1
if s[i] in vowels:
temp -= 1
prev = temp # 이전값 저장
vowelCount = max(temp, vowelCount)
return vowelCount

'leetcode' 카테고리의 다른 글
| [leetcode] 1004. Max Consecutive Ones III 파이썬 코드 (0) | 2024.08.13 |
|---|---|
| [leetcode] 1493. Longest Subarray of 1's After Deleting One Element 파이썬 코드 (0) | 2024.08.13 |
| [leetcode] 643. Maximum Average Subarray I 파이썬 코드 (0) | 2024.08.13 |
| [leetcode] 11. Container With Most Water 파이썬 코드 (0) | 2024.08.12 |
| [leetcode] 151. Reverse Words in a String 파이썬 코드 (0) | 2024.08.12 |