Open In App

Python – Test substring order

Last Updated : 27 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given two strings, check if substring characters occur in correct order in string.

Input : test_str = ‘geeksforgeeks’, K = ‘sees’ Output : True Explanation : “s” after that “ee” and then “s” is present in order in string 1. 

Input : test_str = ‘geeksforgeeks’, K = ‘seef’ Output : False Explanation : Unordered String.

Method #1 : Using join() + generator expression + in operator

In this, we check we join all the characters which occur in the substring using join(), post that check if substring is present using in operator.

Python3




# Python3 code to demonstrate working of
# Test substring order
# Using join() + in operator + generator expression
 
# initializing string
test_str = 'geeksforgeeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing substring
K = 'seek'
 
# concatenating required characters
 
 
def temp(sub): return ''.join(chr for chr in sub if chr in set(K))
 
 
# checking in order
res = K in temp(test_str)
 
# printing result
print("Is substring in order : " + str(res))


Output

The original string is : geeksforgeeks
Is substring in order : True

Time Complexity: O(n)

Space Auxiliary: O(n)

Method #2 : Using all() + next() + generator expression

In this, we get the string with just substring characters using next() and generator expression, to check for order, all() operation is used for each character in substring.

Python3




# Python3 code to demonstrate working of
# Test substring order
# Using all() + next() + generator expression
 
# initializing string
test_str = 'geeksforgeeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing substring
K = 'seek'
 
# concatenating required characters using next()
# all() used to test order
test_str = iter(test_str)
res = all(next((ele for ele in test_str if ele == chr), None) is not None for chr in K)
 
# printing result
print("Is substring in order : " + str(res))


Output

The original string is : geeksforgeeks
Is substring in order : True

Time Complexity: O(n)

Auxiliary Space: O(n)

Method #3 : Using find() method

Python3




# Python3 code to demonstrate working of
# Test substring order
 
# initializing string
test_str = 'geeksforgeeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing substring
K = 'seek'
ns = ""
for i in test_str:
    if i in K:
        ns += i
res = False
if(ns.find(K) != -1):
    res = True
# printing result
print("Is substring in order : " + str(res))


Output

The original string is : geeksforgeeks
Is substring in order : True

Time Complexity: O(n)

Auxiliary Space: O(n)

Method #4 : Using replace() and find() methods

Python3




# Python3 code to demonstrate working of
# Test substring order
 
# initializing string
test_str = 'geeksforgeeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing substring
K = 'seek'
for i in test_str:
    if i not in K:
        test_str=test_str.replace(i,"")
res=False
if(test_str.find(K)!=-1):
    res=True
# printing result
print("Is substring in order : " + str(res))


Output

The original string is : geeksforgeeks
Is substring in order : True

Method #5 : Using operator.contains() method

Approach

  1. Replace all characters of test_str which are not present in K using replace() method
  2. Now check whether K is present in test_str using operator.contains() method
  3. Display the return value of operator.contains()

Python3




# Python3 code to demonstrate working of
# Test substring order
 
# initializing string
test_str = 'geeksforgeeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing substring
K = 'seek'
for i in test_str:
    if i not in K:
        test_str=test_str.replace(i,"")
import operator
res=operator.contains(test_str,K)
# printing result
print("Is substring in order : " + str(res))


Output

The original string is : geeksforgeeks
Is substring in order : True

Time Complexity : O(N) N- length of string

Auxiliary Space – O(1) because res is a single variable

Method 6 :  using list comprehension and the all() function

Python3




# Python3 code to demonstrate working of
# Test substring order
 
# initializing string
test_str = 'geeksforgeeks'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing substring
K = 'seek'
 
# using list comprehension and all()
res = all(K[i] in test_str[test_str.find(K[i-1])+1:] for i in range(1, len(K)))
 
# printing result
print("Is substring in order : " + str(res))


Output

The original string is : geeksforgeeks
Is substring in order : True

The time complexity of this approach is O(n^2), where n is the length of the substring K, because for each character in K, we need to search through the remaining part of test_str to find its position.

The auxiliary space complexity is O(1), because we only use a few extra variables to store the current position in test_str, the previous position found by find(), and the result of the all() function. No additional data structures are created.



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads