题目
思路
刚开始以为是找出最长公共子串。后来改了一下样例,发现真的是找出“前缀”。
于是先来一波暴力解法。以第一个string为参考点,依次针对这个string的每个字母,对整个string数组的string进行相同位置的遍历。如果遇到字符不相等的情况,说明这个位置及其之后都不是公共前缀了。于是停止。暴力算法的时间复杂度是O(n²)。击败了7%的答案。
另外一个优化的方法是,还是以第一个string作为参考点。不过与暴力法不同的是,它对string数组进行遍历。比如,第一个“flower”与“flow”的公共前缀为“flow”,ans就更新为“flow”,遍历到“flight”时,再更新为“fl”。
发现这个方法时间复杂度击败了92%的答案。有点奇怪,因为这个算法的时间复杂度其实也是O(n²)。结果最后的速度差的有点远。
暴力算法代码
class Solution {
public:
string longestCommonPrefix(vector<string>& s) {
int len=s.size();
if(len==0)return "";
int len1=s[0].size();
if(len1&