Leetcode14. 最长公共前缀
思路
从前往后找两两字符串的公共前缀,等到遍历完数组,结果就是所有字符串的公共前缀了。
代码
string prefixOf2(string s1, string s2) { //找出两个字符串的公共前缀
int len = min(s1.length(), s2.length());
int i = 0;
while (i < len && s1[i] == s2[i]) {
i++; //公共前缀的位数
}
string pre = s1.substr(0, i);//取公共前缀
return pre;
}
string longestCommonPrefix(vector<string>& strs) {
string pre="";
if(strs.size()==0){} //当字符串数组为空时,立刻返回,不然测试的时候会出现编译错误
else{
pre = strs[0];
for (int i = 1; i < strs.size(); i++) {
if (pre.length() == 0) break; //公共前缀为空时跳出循环
else pre = prefixOf2(pre, strs[i]);
}
}
return pre;
}
总结
- 刚开始看到题目时,以为要找最长子序列,想了很久,感觉有点麻烦,后来看了一下“解题”,才发现要找的是公共前缀T.T(认真点看题吧
- 第一次提交的时候出现了编译错误:Runtime Error Message:reference binding to null pointer of type ‘struct value_type’,查了一下,应该是测试用例为空数组时,出现了数组越界。原因是我一上来就取第0个元素pre = strs[0],后来先判断了数组是否为空就通过了