Skip to main content

Leetcode 14: Longest Common Prefix


1. Problem Statement (Simple Explanation):


You are given an array of strings strs.

You need to find the longest common prefix shared by all the strings.

  • prefix is a substring starting at index 0.

  • If there is no common prefix, return the empty string "".


2. Examples:

Example 1:

Input: strs = ["flower","flow","flight"]

Output: "fl"

Explanation:

  • All strings start with "fl":

    • "flower" → "fl..."

    • "flow" → "fl..."

    • "flight" → "fl..."

  • Next character differs ('o' vs 'i'), so longest common prefix is "fl".


Example 2:

Input: strs = ["dog","racecar","car"]

Output: ""

Explanation:

  • First characters: 'd', 'r', 'c' → already different.

  • So there is no common prefix → return "".


3. Approach 1 – Vertical Scanning (Character by Character):

Intuition:

Use the first string as a reference and compare character by character across all strings:
  • For each index i in the first string:

    • Check if all other strings have the same character at position i.

    • If any string:

      • is too short (i is out of bounds), or

      • has a different character at i, then the common prefix ends just before i.

This is simple and efficient for the constraints.


Algorithm (Step-by-Step):


  1. If strs is empty (not in constraints but good to handle), return "".

  2. Let first = strs[0].

  3. For each index i from 0 to len(first) - 1:

    • Let c = first[i].

    • For each other string strs[j] (j from 1 to n-1):

      • If i is out of bounds for strs[j] (i.e., i >= len(strs[j])) or strs[j][i] != c:

        • Return first[0:i] (prefix up to but not including index i).

  4. If loop completes, entire first is a common prefix → return first.


Pseudo-code (Vertical Scanning):



Complexity:


Let:

  • n = number of strings

  • L = length of the shortest string L

  • Time: in worst case, we compare each character for each string: O(n-L)

  • Space: O(1) extra (ignoring output string).


4. Approach 2 – Horizontal Scanning (Prefix Shrinking):


You can mention briefly for your blog/video:

  • Start with prefix = strs[0].

  • For each string s in the array:

    • While s does not start with prefix, remove the last character from prefix.

    • If prefix becomes empty, return "".

  • Return the final prefix.

This is also O(n*L)` and a common alternative.

For implementation, Approach 1 (vertical scanning) is clean and intuitive.


5. Java code:



6. C code:



7. C++ code:



8. Python code:



9. JavaScript code:




Comments

Popular posts from this blog

Leetcode 1: Two Sum

  Leetcode Link: https://leetcode.com/problems/two-sum/ 1. Problem Statement (Simple Explanation) You are given: An array of integers nums An integer target You need to  return the indices of two numbers in the array  such that: Conditions: Each input has  exactly one solution . You  cannot use the same element twice . You can return the answer in  any order . 2. Examples Example 1 Input:                                    nums = [2, 7, 11, 15], target = 9 Output:                                 [0, 1] Explanation:                     nums[0]+nums[1]=2+7=9              So we return [0, 1]. Example 2 Input:           ...

Leetcode 3: Longest Substring Without Repeating Characters

  Leetcode Link 1. Problem Statement (Simple Explanation) You are given a string s. You need to find the length of the longest substring of s that does not  contain any repeated characters. A substring is a contiguous sequence of characters in the string. You must return an integer length, not the substring itself. 2. Examples Example 1 Input: s = "abcabcbb" Output: 3 Explanation: Some substrings without repeating characters: "abc", "bca", "cab"The longest length is 3. Example 2 Input: s = "bbbbb" Output: 1 Explanation: All substrings that are valid are just "b". The longest length is 1. Example 3 Input:   s = "pwwkew" Output:   3 Explanation: Possible substrings without repetition: "pw", "wke", "kew". "wke" or "kew" have length 3. "pwke" is not valid because it’s not contiguous in the original string (p and k are separated by ww). Constraints...

Leetcode 2: Add Two Numbers

Leetcode Link: https://leetcode.com/problems/add-two-numbers/ 1. Problem Statement (Simple Explanation) You are given  two non-empty linked lists , l1 and l2, that represent two non-negative integers. Each node contains a  single digit . The digits are stored in  reverse order  (i.e., the 1’s digit is at the head). You need to  add the two numbers  and return the  sum as a linked list , also in reverse order. You can assume: There are  no leading zeros , except when the number itself is 0. 2. Examples Example 1 Input:                l1 = [2,4,3]                l2 = [5,6,4]           Interpreting linked lists as numbers (reverse order): l1 represents 342 l2 represents 465 Output:                [7,0,8] Explanation:        ...