-
Notifications
You must be signed in to change notification settings - Fork 14
Solution #14 - Daniel/Edited - 16.03.2025 #36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
danzang100
wants to merge
4
commits into
Dijkstra-Edu:master
Choose a base branch
from
danzang100:feature/longest-common-prefix
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
41 changes: 41 additions & 0 deletions
41
...14 - Longest Common Prefix - Easy/Explanation - Longest Common Prefix - Easy.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# Longest Common Prefix | ||
|
||
## Overview | ||
|
||
The goal is to find the longest common prefix among an array of strings. | ||
|
||
## Possible Approaches: | ||
|
||
### 1. Lexicographic Sorting | ||
|
||
1. Lexicographically sorting the array | ||
2. Comparing the first and last of the sorted array for prefix. | ||
3. Create an empty string called prefix. | ||
4. Iteratively, go through the characters to add matching characters to the prefix string. | ||
5. When there is a mismatch, end the loop and return the prefix string. | ||
|
||
- Since we are lexicographically sorting the array, the first and last string are the most different. Finding the common prefix between the two, would be the longest common prefix for all the strings in the array between them. | ||
|
||
#### Time Complexity | ||
|
||
O(nlogn) because we sort the array, traversing the two strings will be done in O(n) time which is overshadowed by the worser time complexity O(nlogn). | ||
|
||
#### Space Complexity | ||
|
||
O(m) because we need to store a string of length m, where m is the length of the longest common prefix. | ||
|
||
### 2. Iterative String Matching | ||
|
||
1. Declare the prefix string to be the first string. | ||
2. Compare the prefix string with the immediate next string to find the longest common prefix by removing elements from the prefix string. | ||
3. Continue comparing with the next string with the reduced prefix string. | ||
4. Ideally, the prefix string will keep reducing at each step, reducing the number of comparisons required at each step too. | ||
5. Return the final prefix string. | ||
|
||
#### Time Complexity: | ||
|
||
O(m\*n) because we traverse n strings of average length m. | ||
|
||
#### Space Complexity | ||
|
||
O(m) where m is the length of the first string. |
18 changes: 18 additions & 0 deletions
18
... & Strings/#14 - Longest Common Prefix - Easy/Solution - Longest Common Prefix - Easy.cpp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
class Solution { | ||
public: | ||
string longestCommonPrefix(vector<string>& strs) { | ||
string ans = ""; | ||
sort(strs.begin(), strs.end()); | ||
string prefix = strs[0]; | ||
string end = strs[strs.size()-1]; | ||
int n = 0; | ||
for(int i = 0; i<min(prefix.size(), end.size()); i++){ | ||
if(prefix[i] != end[i]){ | ||
n = i; | ||
break; | ||
} | ||
ans += prefix[i]; | ||
} | ||
return ans; | ||
} | ||
}; |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Much better! Kindly add the solutions corresponding to the explanation as well into the cpp file