最长的共同前缀
题目:一组字符串,在其中找出它们共同的前缀。
思路:先找出最短的那个字符串,然后用来搜索其他的字符。
错误:不知道为啥,跑LeetCode的案例都过不了,很是费解。
string longestCommonPrefix(vector<string>& strs) { for (int i = 0;i < strs.size();i++) { if (strs[i] == "") { return ""; } } //策略:先统计没串字符串的个数,然后按照个数的大小排序 string minLenStr = ""; int minNumb = strs[0].length(); int index = 0; for (int i = 0;i < strs.size();i++) { if (strs[i].length() <= minNumb) { //cout << strs[i] << endl; minNumb = strs[i].length(); minLenStr = strs[i]; index = i; } } //根据最小值对字符串进行搜索 string str = ""; vector<int>numb; for (int i = 0;i<minLenStr.length();i++) { numb.push_back(-1); } for (int i = 0;i < minNumb;i++) { for (int j = 0;j < strs.size();j++) { if (minLenStr[i] == strs[j][i] && j != index) { //str = str + strs[index][i]; numb[i] = 0; } else { break; } } } for (int i = 0;i<numb.size();i++) { if (numb[i] == -1) { break; } else { str = str + minLenStr[i]; } } return str; }
///////////////////////////////////////////////////////
然后我看了高分的答案,看了下跟我的貌似没什么差别
代码如下:
int n = strs.size();
string res = "";
if (n == 0)
{
return "";
}
for (int i = 0;i<strs[0].size();i++)
{
for (int j = 0;j<n;j++)
{
if (i>strs[j].length() - 1 || strs[0][i] != strs[j][i])
{
return res;
}
}
res += strs[0][i];
}
return res;
有木有发现其实差不多的,只不过他没有找最小的那个,同时他的字符拼接是在扫描完一遍vector然后拼接,我认为我的代码有问题应该是这个地方出了问题。
浙公网安备 33010602011771号