题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
解答:
string longestCommonPrefix(vector<string>& strs) { int size = strs.size(); if (size == 0) return ""; else if (size == 1) return strs.at(0); int len = strs.at(0).length(); if (len == 0) return ""; bool bContinue = true; int i = 0; for (i = 0; i < len; i++) { char cI = strs.at(0).at(i); for (int j = 1; j < size; j++) { if (strs.at(j).length() <= i) { bContinue = false; break; } if (strs.at(j).at(i) == cI) continue; bContinue = false; break; } if (!bContinue) break; } if (i == 0) return ""; return strs.at(0).substr(0, i); }
上面的判断有些复杂,还使用了一个标志位,修改如下:
string longestCommonPrefix2(vector<string>& strs) { int size = strs.size(); if (size == 0) return ""; else if (size == 1) return strs.at(0); string result = ""; for (int i = 0; i < strs.at(0).size(); i++) { char c = strs.at(0).at(i); for (int j = 1; j < size; j++) { if (strs.at(j).length()>i) { if (strs.at(j).at(i) != c) return result; } else { return result; } } result += c; } return result; }
吐槽下代码提交后的排名,感觉波动很大,不准。。。