Python | Find longest consecutive letter and digit substring

Given a String (may contain both letters and digits), write a Python program to find the longest consecutive letter and digit substring.

Examples:

Input : geeks123available
Output : ('available', 123)

Input : 98apple658pine
Output : ('apple', 658)

 
Approach #1 : Brute force
This is the Naive or brute force approach to find the longest consecutive letter and digit substring. We take two string type variable longest_letter and longest_digit. We start a loop and check for consecutive substrings of letter and digit. In each iteration, we check if the current letter substring is longer than the longest letter or digit substring respectively. If yes, we assign the current substring of letter and digit to the longest letter and digit substring respectively. Otherwise, do nothing.



filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the longest 
# consecutive substring of a certain type
import re
  
def longestSubstring(s):
      
    longest_letterSeq = ''
    longest_digitSeq = ''
    i = 0
    while(i<len(s)):
          
        curr_letterSeq = ''
        curr_digitSeq = ''
          
        # For letter substring 
        while(i<len(s) and s[i].isalpha()):
            curr_letterSeq += s[i]
            i+= 1
  
        # For digit substring
        while(i<len(s) and s[i].isdigit()):
            curr_digitSeq += s[i]
            i+= 1
  
        # Case handling if the character 
        # is neither letter nor digit    
        if(i< len(s) and not(s[i].isdigit()) 
                     and not(s[i].isalpha())) :
            i+= 1
          
        if(len(curr_letterSeq) > len(longest_letterSeq) ):
            longest_letterSeq = curr_letterSeq
              
        if(len(curr_digitSeq) > len(longest_digitSeq) ):
            longest_digitSeq = curr_digitSeq
          
    return longest_letterSeq, longest_digitSeq
  
# Driver Code
str = '3Geeksfor123geeks3'
print(longestSubstring(str))

chevron_right


Output:

('Geeksfor', '123')

 
Approach #2 : Using Python regex
Python Regex is another method to solve the given problem. Find the substring sequence of digits and letters using Python regex and then find the longest substring length respectively.

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find the longest 
# consecutive substring of a certain type
import re
  
def longestSubstring(str):
    letter = max(re.findall(r'\D+', str), key = len)
    digit = max(re.findall(r'\d+', str), key = len)
      
    return letter, digit
  
# Driver Code
str = 'geeks123geeksforgeeks1'
print(longestSubstring(str))

chevron_right


Output:

('geeksforgeeks', '123')


My Personal Notes arrow_drop_up


If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.