Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Substring Matching Pattern

Updated
2 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "3407" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

You are given a string s and a pattern string p, where p contains exactly one '' character. The '' in p can be replaced with any sequence of zero or more characters. Return true if p can be made a substring of s, and false otherwise. Example 1: Input: s = "leetcode", p = "eee" Output: true Explanation: By replacing the '' with "tcod", the substring "eetcode" matches the pattern. Example 2: Input: s = "car", p = "cv" Output: false Explanation: There is no substring matching the pattern. Example 3: Input: s = "luck", p = "u" Output: true Explanation: The substrings "u", "uc", and "uck" match the pattern. Constraints: 1 <= s.length <= 50 1 <= p.length <= 50 s contains only lowercase English letters. p contains only lowercase English letters and exactly one '*'

Explanation

Here's the breakdown of the approach, complexity, and the Python code:

  • Approach:

    • Split the pattern p into two parts at the * character.
    • Iterate through the string s to find potential starting positions for the pattern.
    • Check if the parts before and after the * match the corresponding prefixes and suffixes of the substring in s.
  • Complexity:

    • Runtime: O(m*n), where n is the length of s and m is the length of p. Storage: O(1).

Code

    def solve():
    s = input()
    p = input()

    star_index = p.find('*')
    prefix = p[:star_index]
    suffix = p[star_index + 1:]

    for i in range(len(s) - len(p) + 1):
        substring = s[i: i + len(p) - 1] 

        if substring.startswith(prefix) and substring.endswith(suffix):
            return True

    if len(prefix) + len(suffix) == len(p) - 1: #Edge case where the * represents 0 characters and the substring has the exact size.
        for i in range(len(s) - len(prefix) - len(suffix) + 1):
            substring = s[i : i + len(prefix) + len(suffix)]
            if substring.startswith(prefix) and substring.endswith(suffix):
                return True


    if len(suffix) == 0:
        for i in range(len(s) - len(prefix) + 1):
            substring = s[i : ]
            if substring.startswith(prefix):
                return True

    if len(prefix) == 0:
        for i in range(len(s) - len(suffix) + 1):
            substring = s[i : ]
            if substring.endswith(suffix):
                return True

    return False


print(solve())

More from this blog

C

Chatmagic blog

2894 posts