Anjali verma
Anjali verma

Reputation: 1

Write a program to check the overlapping of one string's suffix with the prefix of another string

a = input()
b = input()



def longestSubstringFinder(string1, string2):
    answer = ""
    len1, len2 = len(string1), len(string2)
    for i in range(len1):
        match = ""
        for j in range(len2):
            if (i + j < len1 and string1[i + j] == string2[j]):
                match += string2[j]
            else:
                if (len(match) > len(answer)): answer = match
                match = ""
    if answer == '':
        return 'No overlapping'
    else:
        return answer

print(longestSubstringFinder(a, b))

in the above code, not getting the expected outcome for the input correct wrong

My output: e expected output: No overlapping

Upvotes: 0

Views: 6646

Answers (3)

Sumanth Mudepalli
Sumanth Mudepalli

Reputation: 1

a = str(input())
b = str(input())
g=len(a)-1
prefix = "No overlapping"
for i in range(len(a)):
    if a[(g-i):] == b[:i+1]:
        prefix = b[:i+1]
print(prefix)

Upvotes: -1

Rabindra
Rabindra

Reputation: 401

Using RegEX, you can do it with lesser lines of code. I'm assuming you're a beginner in Python. If you are, then please learn RegEx and List Comprehension for this type of code.

import re
str1, str2 = input(), input()

def longestSubstringFinder(string1, string2):
    
    list_of_subsets = [str1.replace(str1[:i], '') for i in range(len(str1))]

    intersect = [re.search('^'+slc, str2).group() for slc in list_of_subsets if re.search('^'+slc, str2)]

    if len(intersect) == 0:
        return 'No overlapping'
    else:
        return intersect[0]

print(longestSubstringFinder(str1, str2))

Upvotes: 1

trincot
trincot

Reputation: 350252

Some issues:

  • the else block should not allow the inner loop to continue: when you have a mismatch, you should not try matches with higher values of j, but you should exit that loop and try with the next value for i. So there needs to be a break in the else block
  • the condition len(match) > len(answer) is not enough to identify a solution. The reason for getting into the else block might have been that the characters didn't match, so in that case you should never update answer.
  • On the other hand, the update of answer is not happening now when the inner loop ends normally, i.e. when all compared characters were equal and i + j < len1 was always true. This case happens when the second input string is a suffix of the first. So you must make the update to answer somewhere else, so you also catch this case.

Here is the correction to your code, dealing with these issues:

def longestSubstringFinder(string1, string2):
    answer = ""
    len1, len2 = len(string1), len(string2)
    for i in range(len1):
        match = ""
        for j in range(len2):
            if (i + j < len1 and string1[i + j] == string2[j]):
                match += string2[j]
                # Move the assignment to answer here, and add condition that
                #  this was the last character of string1:
                if i + j == len1 - 1 and len(match) > len(answer): answer = match
            else:
                break  # Necessary!
    if answer == '':
        return 'No overlapping'
    else:
        return answer

With the use of string slicing, and comparing those slices instead of individual characters, you can make your code shorter and run faster.

Upvotes: 1

Related Questions