Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

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 string
test_str = 'geeksforgeeks is best for geeks'
  
# printing original string
print("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 string
test_str = 'geeksforgeeks is best for geeks'
  
# printing original string
print("The original string is : " + str(test_str))
  
# initializing K 
K = 'e'
  
# getting all indices using filter + lambda
indxs = 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
Recommended Articles
Page :

Start Your Coding Journey Now!