寻找字符串数组中的最长共同前缀字符串

问题描述:给定一个字符串数组 strs,编写一个函数来找到这些字符串的最长公共前缀字符串,如果没有则返回空字符串""

算法思路
  • 横向扫描法:
    1. 从数组的第一个字符串开始,逐个和后面的字符串比较,逐步缩短公共前缀
    2. 如果在某次比较中公共前缀为空,则直接返回空字符串
let strs=["flower","flow","flight"]
const longCommon=(strArr)=>{
	if(strArr.length==0) return ''
	// 首先设定第一个字符串为比较的字符串
	let prefix=strArr[0]
	for(let i=1;i<strArr.length;i++){
		while(strArr[i].indexOf(prefix)!==0){
			prefix=prefix.substring(0,prefix.length-1)
			if(prefix.length===0) return ''
		}
	}
	return prefix
}
longCommon(strs)
  • 纵向扫描法:
    1. 从第一个字符开始,逐列比较每个字符串的字符,直到发现不匹配的字符为止
    2. 如果在某列发现不匹配的字符,则返回当前列之前的所有字符作为公共前缀
let strs=["flower","flow","flight"]
const longCommon=(strArr)=>{
	if(strArr.length==0) return ''
	// 首先找到这个数组中最小长度的字符串的长度
	let minLen=Math.min(...strArr.map(e=>e.length))
	for(let i=0;i<minLen;i++){
	let char=strArr[0][i]
	for(let j=1;j<strArr.length;j++){
		if(strArr[j][i]!==char){
			return strArr[0].substring(0,i)
		}
	}
	}
	return strArr[0].substring(0,minlen)
}
longCommon(strs)

你可能感兴趣的:(前端,javascript)