其实这道题我最初是想用前缀树来做的,trie树的第一个分叉口之前的单分支树的就是所求。
后来一想其实可以简单点,先找出所有字符串中最短的,然后进行查找即可。
class Solution {
public:
//水平扫描法
string longestCommonPrefix(vector<string>& strs) {
if (strs.size() == 0)return "";
//1.先求出数组中最短的字符串及其长度
int min_len = INT_MAX;
int min_len_index = 0;
for (int i = 0; i < strs.size(); i++)
{
if (strs[i].size() < min_len)
{
min_len = strs[i].size();
min_len_index = i;
}
}
for (int i = 0; i < min_len; i++)
{
char temp = strs[min_len_index][i];
for (int j = 0; j < strs.size(); j++)
{
if (strs[j][i] != temp)
{
return strs[min_len_index].substr(0,i);
}
}
}
return strs[min_len_index];
}
};