Given an array of strings we have to find the longest common prefix between them. If there is no prefix then return empty string.
Example
Input: ["flower","flow","flight"] Output: "fl" Input: ["dog","racecar","car"] Output: "" There is no common prefix among the input strings.

Method 1: Using sorting to find the longest common prefix.
The idea is to.
- Sort the strings in ascending order based on their length.
- Then use the smallest among them and iterate for each character for it, because max prefix will be less than or equal to the smallest string.
- In each iteration check if prefix exists for the remaining words or not, if it exists then store it, else break and return the string.
const longestCommonPrefix = (strs) => {
//If empty array return empty string
if(strs.length === 0){
return "";
}
//To track the prefix
let lc = "";
//Sort the string in ascending order
strs.sort((a, b) => ('' + a).localeCompare(b));
//Get the smallest string.
let smallest = strs[0];
//so that we have to iterate for it only.
for(let i = 0; i < smallest.length; i++){
//Get the first letter
let current = smallest[i];
//Flag to check if prefix is present in the remaining string
let isPresent = true;
for(let values of strs){
//Break if different letter
if(values[i] !== current){
isPresent = false;
break;
}
}
//Break the loop if no prefix
if(i === 0 && !isPresent){
break;
}
//Add the prefix
lc += isPresent ? current : '';
}
//return the prefix
return lc;
};
Input: console.log(longestCommonPrefix(["flower","flow","flight"])); Output: "f1"
Time complexity: O(nlogn + (n * length of smallest word in the string)).
Space complexity: O(1) or O(n) if we are using different sort.
Method 2: By deleting the characters from end.
Conceptually this is how it works.
- Get the first word from the array.
- Iterate for each word in the array and check if it is not the same word.
- Then keep on removing the characters from the end till the prefix is found.
- If there is no prefix and string becomes empty then break and return empty string.
const longestCommonPrefix = (strs) => {
//If empty array
if(strs.length == 0) {
return "";
}
//Get the first word
let str = strs[0];
//look for prefix in each word
for (const word of strs) {
while (word.indexOf(str) !== 0) {
// remove one character from the end
str = str.substring(0, str.length - 1);
if (str === ""){
break;
}
}
}
return str;
};
Time complexity: O(n * length of the largest string).
Space complexity: O(1).