在解决leetcode的问题:找出最长的common前缀时,报了下面的错误
从字面意思理解时引用了空指针,其实在这里就是数组下标越界。访问了不存在的元素。
string longestCommonPrefix(vector<string>& strs) {
vector<vector<char>> common_prefixs;
//if (strs.empty())
//{
// return string("");
//}
int shortest_size_of_string = 10000;
int index_of_shortest_string = 0;
for (int i = 0; i < strs.size(); i++)
{
if (strs[i].size()<shortest_size_of_string)
{
shortest_size_of_string = strs[i].size();
index_of_shortest_string = i;
}
}
int nums_of_common_prefix = 0;
for (int j = 0; j < shortest_size_of_string ; j++)
{
int is_for_down = 0;
for (int i = 0; i < strs.size(); i++)
{
if (strs[index_of_shortest_string][j] != strs[i][j])
{
is_for_down++;
}
}
if (is_for_down == 0)
{
nums_of_common_prefix++;
}
else {
break;
}
}
if (nums_of_common_prefix>0)
{
string anwser_string;
anwser_string = strs[index_of_shortest_string].substr(0, nums_of_common_prefix);
return anwser_string;
}
else
{
return string("");
}
}
以上是我的代码,按照leetcode的报错时的输入,就是输入空的vector时,会报错。
问题分析:
调试发现,因为如果输入为空的话,这个shortest_size_of_string 参数就会在第二个for循环里当循环次数,nums_of_common_prefix这个就会++10000次,最终预期的“相同的最长前缀长度”就会被这个数字取代,然后下面访问数组的一些操作就会越界。
解决方法:
在开头判断传入的引用vector是否为空,为空的话,直接return;