You are given a string my_string and a positive integer k. Write code that prints the first substring of my_string of length k all of whose characters are identical (lowercase and uppercase are different). If none such exists, print an appropriate error message (see Example 4 below). In particular, the latter holds when my_string is empty.
Example: For the input my_string = “abaadddefggg”, k = 3 the output is For length 3, found the substring ddd!
Example: For the input my_string = “abaadddefggg”, k = 9 the output is Didn’t find a substring of length 9
this is my attempt:
my_string = 'abaadddefggg'
k = 3
s=''
for i in range(len(my_string) - k + 1):
if my_string[i:i+k] == my_string[i] * k:
s = my_string[i:i+k]
if len(s) > 0:
print(f'For length {k}, found the substring {s}!')
else:
print(f"Didn't find a substring of length {k}")
>Solution :
You need break
. When you find the first occurrence you need to exit from the for-loop
. You can do this with break
. If you don’t break
you continue and maybe find the last occurrence if exists.
my_string = 'abaadddefggg'
k = 3
s=''
for i in range(len(my_string) - k + 1):
if my_string[i:i+k] == my_string[i] * k:
s = my_string[i:i+k]
break
if len(s) > 0:
print(f'For length {k}, found the substring {s}!')
else:
print(f"Didn't find a substring of length {k}")
You can use itertools.groupby
and also You can write a function and use return
and then find the first occurrence and return
result from the function.
import itertools
def first_occurrence(string, k):
for a, b in itertools.groupby(string):
lst_b = list(b)
if len(lst_b) == k:
return ''.join(lst_b)
return ''
k = 3
s = first_occurrence(my_string, k=3)
if len(s) > 0:
print(f'For length {k}, found the substring {s}!')
else:
print(f"Didn't find a substring of length {k}")