題目:
Write a function to find the longest common prefix string amongst an array of strings.
分析:
一堆string裏面,找到大家共有的從頭部開始的字串
思路:
遍歷,複雜度O(N)。每次記下當前最長的字串,然後跟新的一個string比較,獲取當前的最長字串。
代碼:
string longestCommonPrefix(vector<string>& strs) {
string str, max_str;
int len_strs = strs.size();
int len1, len2;
if(len_strs == 0)
{
return "";
}
max_str = strs[0];
for(int i = 1;i < len_strs; i++)
{
len1 = max_str.size();
len2 = strs[i].size();
str = "";
for (int j = 0; j < (len1 < len2? len1 : len2); j ++)
{
if(max_str[j] == strs[i][j])
{
str = str + max_str[j];
}
else
{
break;
}
}
max_str = str;
}
return max_str;
}
更簡單的算法:discuss中發現的:
思路:將第一個string作爲模板,一個char一個char的判斷,直到某個不一致就結束。
前面的思路是:一個string一個string的判斷二者之間的最長開頭子串。
代碼:
string longestCommonPrefix(vector<string>& strs) {
if (strs.empty()) return "";
for (int pos = 0; pos < strs[0].length(); pos++)
for (int i = 1; i < strs.size(); i++)
if (pos >= strs[i].length() || strs[i][pos] != strs[0][pos])
return strs[0].substr(0, pos);
return strs[0];
}