Python – Longest Consecution without K in String

• Last Updated : 23 Oct, 2020

Given a String, find length of longest consecution, in which K doesn’t appear.

Input : test_str = ‘geeksforgeeks is best for geeks’, K = ‘e’
Output : 9
Explanation : from s in best to e in geeks, 9th letter is “e”.

Input : test_str = ‘geeksforgeeks’, K = ‘e’
Output : 7
Explanation : from k to e, 7th letter is e, longest run.

Method #1 : Using loop

We perform this in 2 steps, in 1st we iterate for all elements to get indices of K, and then in next step find the maximum difference between consecutive characters.

Python3

 # Python3 code to demonstrate working of # Longest Consecution without K in String# Using loop  # initializing stringtest_str = 'geeksforgeeks is best for geeks'  # printing original stringprint("The original string is : " + str(test_str))  # initializing K K = 'e'  # getting all indices indxs = []for idx, ele in enumerate(test_str):    if ele == 'e':        indxs.append(idx)  # getting difference diffs = []for idx in range(len(indxs) - 1):    diffs.append(indxs[idx + 1] - indxs[idx])  # getting max diff using max()res = max(diffs)  # printing result print("Longest run : " + str(res))
Output
The original string is : geeksforgeeks is best for geeks
Longest run : 9

Method #2 : Using filter() + lambda + zip() + list comprehension + max()

In this, we get index of K elements using filter() + lambda and zip() + list comprehension is used to get differences between indices. Post that, max() is used for extracting maximum difference.

Python3

 # Python3 code to demonstrate working of # Longest Consecution without K in String# Using filter() + lambda + zip() + list comprehension + max()  # initializing stringtest_str = 'geeksforgeeks is best for geeks'  # printing original stringprint("The original string is : " + str(test_str))  # initializing K K = 'e'  # getting all indices using filter + lambdaindxs = list(filter(lambda ele: test_str[ele] == 'e', range(len(test_str))))   # getting difference using zip()# negative index, for getting successive elements diffs = [j - i for i, j in zip(indxs[: -1], indxs[1 :])]   # getting max diff res = max(diffs)  # printing result print("Longest run : " + str(res))
Output
The original string is : geeksforgeeks is best for geeks
Longest run : 9

My Personal Notes arrow_drop_up