题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例一:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例二:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
算法思路:
- 判断字符串是否为空,若为空,则输出""
- 数组的第一个字符串当做参照,将后面的每一个与第一个作比较
- 用两层循环来控制,第一层是第一个字符串的长度,因为最长的字符串也不会大于第一个字符串的长度,第二层内层循环是每一位的比较,用第一个字符串的每一位与后面每一个字符后的相应位做比较。
- 如果相同,则记录下这个字符继续循环,如果不同,则跳出循环,返回result。
具体代码:
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function(strs) {
var f = strs[0];
var result = '';
if(strs.length == 0){
return result;
}
for(var i = 0 ;i < f.length ;i++){
for(var j = 1 ; j < strs.length ; j++){
if(f[i] != strs[j][i]){
return result;
}
}
result+=f[i];
}
return result;
};
结果:
C语言解法:
char* longestCommonPrefix(char** strs, int strSize){
char *str = strs[0];//利用第一个来判断
int i,j;
if(strSize == 0) return "";
for(i = 1; i<strSize;i++){
j = 0;
while(str[j]&&strs[i][j]&&str[j]==strs[i][j])j++;//避免数组溢出并判断下一个元素是否相同
str[j] ='\0';//字符串结束符只输出前面对应相同的
}
return str;
}