Untitled
unknown
c_cpp
2 years ago
1.7 kB
11
Indexable
#include<bits/stdc++.h>
using namespace std;
// time O(sum of length of all strings), space O(1)
// created by Aman Jain
// update: comments added, optmized code, removed unnecessary counter variables
// and control statements
string findCommonPrefix(vector<string> stringList) {
int upperBound = -1, answerNotFound = 1;
for(int i = 0; answerNotFound == 1; ++i) { // loop to increment current common index
for(int j = 1; j < stringList.size(); ++j) { // loop to traverse all strings
if(i >= stringList[j].size() || stringList[j][i] != stringList[0][i]) {
// if i is out of range for current string
// or the letter is not equal to the first string's i'th letter
// then prefix upperBound is previous i, set answerNotFound to 0
// which will break the outer for loop
answerNotFound = 0;
upperBound = i - 1;
}
}
}
// if prefix upperBound is -1, it means that there is no common prefix substring, return empty string
// otherwise calculate the common prefix string using string::substr method and return it.
// string::substr method takes starting index and size of the substring
return upperBound > -1 ? stringList[0].substr(0, upperBound + 1) : "";
}
int main() {
int n, upperBound = -1;
bool answerNotFound = true;
vector<string> stringList;
cin >> n;
for(int i = 0; i < n; ++i) {
string str;
cin >> str;
stringList.push_back(str);
}
string answer = findCommonPrefix(stringList);
cout << "common prefix substring is : " << answer << endl;
return 0;
}
Editor is loading...