Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c4a701a

Browse files
Initial commit
1 parent 01a7cdf commit c4a701a

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Longest Substring with K Distinct Characters (medium)
2+
# Given a string, find the length of the longest substring in it with no more than K distinct characters.
3+
# You can assume that K is less than or equal to the length of the given string.
4+
5+
# Input: String="araaci", K=2
6+
# Output: 4
7+
# Explanation: The longest substring with no more than '2' distinct characters is "araa".
8+
9+
def longest_substring_with_k_distinct(str1, k):
10+
window_start = 0
11+
max_length = 0
12+
char_frequency = {}
13+
14+
# in the following loop we'll try to extend the range [window_start, window_end]
15+
for window_end in range(len(str1)):
16+
right_char = str1[window_end]
17+
if right_char not in char_frequency:
18+
char_frequency[right_char] = 0
19+
char_frequency[right_char] += 1
20+
21+
# shrink the sliding window, until we are left with 'k' distinct characters in the char_frequency
22+
while len(char_frequency) > k:
23+
left_char = str1[window_start]
24+
char_frequency[left_char] -= 1
25+
if char_frequency[left_char] == 0:
26+
del char_frequency[left_char]
27+
window_start += 1 # shrink the window
28+
# remember the maximum length so far
29+
max_length = max(max_length, window_end-window_start + 1)
30+
return max_length
31+
32+
33+
def main():
34+
print("Length of the longest substring: " + str(longest_substring_with_k_distinct("araaci", 2))) # 4
35+
print("Length of the longest substring: " + str(longest_substring_with_k_distinct("araaci", 1))) # 2
36+
print("Length of the longest substring: " + str(longest_substring_with_k_distinct("cbbebi", 3))) # 5
37+
38+
39+
main()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /