解題思路
根據官方的第一個題解的思路實現的,先假設strs[0]爲公共前綴,之後遍歷1-strs.size()的字符串,判斷是否含有prefix,如果不含有prefix,則將prefix長度減1,再次判斷prefix-1是否爲其子串(==0表示含有該字串),直到prefix爲空,感覺官方思路很贊,另外可以通過雙指針的方式實現
考點
字符串處理
代碼
使用find函數實現
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.size() == 0) return "";//strs無字符串,則爲空
string prefix = strs[0];//假設第一個字符串爲公共前綴
for (int i=1;i<strs.size();i++)//判斷每一個字符串中是否含有prefix,
{
while (strs[i].find(prefix)!=0)//如果不含有prefix,則將prefix長度減1,再次判斷prefix-1是否爲其子串(==0表示含有該字串),直到prefix爲空,
{
if (prefix == "") return "";//如果prefix爲空串,則說明公共前綴爲空
prefix = prefix.substr(0, prefix.length() - 1);
}
}
return prefix;
}
};
暴力求解
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size()==0) return "";//爲空需要額外判斷
string result = "";
for (int i=0;i<strs[0].size();i++)
{
for (int j=1;j<strs.size();j++)
{
if (strs[0][i]!=strs[j][i])
{
return result;//當前的result即爲最長公共前綴
}
}
result += strs[0][i];
}
return result;
}
};