Leetcode,LongestCommonPrefix
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string mySolution(string strs[], int n)
{
string res;
string pivot = strs[0];
for ( int j = 0; j < pivot.length(); ++j )
{
int count = 0;
for ( int i = 1; i < n; ++i )
{
if (strs[i][j] != '\0' && pivot[j] == strs[i][j])
{
++count;
}
}
if (count == n - 1)
{
res.push_back(pivot[j]);
}
else
{
break;
}
}
return res;
}
//纵向扫描 时间复杂度O(n1 + n2 + ...)
string solution( vector<string> strs)
{
if (strs.empty()) return "";
for ( int idx = 0; idx < strs[0].size(); ++idx)
{
for ( int i = 1; i < strs.size(); ++i )
{
if (strs[i][idx] != strs[0][idx])
{
return strs[0].substr(0, idx);
}
}
}
return strs[0];
}
//横向扫描 时间复杂度O(n1 + n2 + ...)
string solution2(vector<string> strs)
{
if (strs.empty()) return "";
int right_most = strs[0].size() - 1;
for ( size_t i = 1; i < strs.size(); ++i )
{
//right_most保证不会越界
for ( int j = 0; j <= right_most; ++j )
{
if (strs[i][j] != strs[0][j])
{
right_most = j - 1;
}
}
}
return strs[0].substr(0, right_most + 1);
}
int main()
{
#if 0
string strs[] = { "flower", "flow", "flight" };
cout << mySolution(strs, 3) << endl; //fl
#endif // 0
vector<string> strs = { "flower", "flow", "flight" };
//cout << solution(strs) << endl; //fl
cout << solution2(strs) << endl; //fl
return 0;
}