题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
思路:
纵向比较。查找最小字符串长度,从最左端开始比较,相同长度加一,否则停止比较。在比较时可借助哈希表,通过判断增加的个数是否是n的倍数来判断。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int map[26]={0};
int n=strs.size();
if(n==0) return "";
int count=0;
int min_size=INT_MAX;
for(int i=0;i<n;i++){
int t=strs[i].size();
if(t<min_size)
min_size=t;
}
for(int i=0;i<min_size;i++){
for(int j=0;j<n;j++){
map[strs[j][i]-'a']++;
}
if(map[strs[0][i]-'a']%n==0){
count+=1;
}
else{
break;
}
}
return strs[0].substr(0,count);
}
};