腾讯T2面试题

cn00439805 2019-09-10 04:05:00
编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:
输入: ["flower","flow","flight"]
输出: "fl"

示例 2:
输入: ["dog","racecar","car"]
输出: ""

说明:
所有输入只包含小写字母 a-z 。
...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2019-09-11
  • 打赏
  • 举报
回复
引用 3 楼 cn00439805 的回复:
[quote=引用 1 楼 文盲老顾 的回复:]
function prefix(arr){
	var r = ''
	if (arr.sort)
	{
		r = arr[0].toLowerCase()
		for(var i=1;i<arr.length;i++){
			var x='';
			for(var j=0;j<r.length&&j<arr[i].length;j++){
				if (r[j]==arr[i].toLowerCase()[j])
				{
					x+=r[j]
				}else{
					break
				}
			}
			r=x
			if (!x)
			{
				break;
			}
		}
	}
	return r
}
alert(prefix(['xxoo','xxuroo','xxalloo','xxinoo']))
alert(prefix([])) //出错[/quote] if (arr.sort) 修改成 if (arr.sort && arr.length) 之前没有判断数组元素为0的情况,自己调整下,不要什么都等别人弄好了
天际的海浪 2019-09-10
  • 打赏
  • 举报
回复
用正则表达式解很简单的

function prefix(arr){
	var r = arr.join(",").match(/^([^,]+)[^,]*(,\1[^,]*)*$/);
	return r ? r[1] : "";
}
alert(prefix(["flower","flow","flight"]))
scscms太阳光 2019-09-10
  • 打赏
  • 举报
回复
//正则匹配简单但没性能
function getPrefix(arr) {
if (Array.isArray(arr)) {
let len = arr.length
if (len > 1) {
let reg = arr.join(',').match(new RegExp('^(.+).*,' + Array(len - 1).fill('\\1.*').join(',')))
return reg ? reg[1] : ''
} else {
return len === 1 ? arr[0] : ''
}
}
}
cn00439805 2019-09-10
  • 打赏
  • 举报
回复
引用 5 楼 scscms太阳光 的回复:
    function getPrefix(arr) {
        if (Array.isArray(arr)) {
            let newArr = arr.slice(0) //克隆一份
            let len = arr.length
            if (len > 1) {
                newArr.sort((a, b) => a.length > b.length ? 1 : -1) //排序一下
                let per = newArr.shift()
                let match
                while(per && !match){
                    match = true
                    newArr.forEach(v=>{
                        if(!v.startsWith(per)){
                            match = false
                        }
                    })
                    if(!match){
                        per = per.slice(0,-1)
                    }
                }
                return per
            } else {
                return arr[0]
            }
        }
    }
    console.log(getPrefix(["flower","flow","flight"]))
    console.log(getPrefix(["dog","racecar","car"]))
    console.log(getPrefix(["我艹cdog","我艹cecar","我艹car"]))
    console.log(getPrefix(["racecar"]))
或者使用split分割判断都可。
console.log(getPrefix([])) //出错
scscms太阳光 2019-09-10
  • 打赏
  • 举报
回复
    function getPrefix(arr) {
if (Array.isArray(arr)) {
let newArr = arr.slice(0) //克隆一份
let len = arr.length
if (len > 1) {
newArr.sort((a, b) => a.length > b.length ? 1 : -1) //排序一下
let per = newArr.shift()
let match
while(per && !match){
match = true
newArr.forEach(v=>{
if(!v.startsWith(per)){
match = false
}
})
if(!match){
per = per.slice(0,-1)
}
}
return per
} else {
return arr[0]
}
}
}
console.log(getPrefix(["flower","flow","flight"]))
console.log(getPrefix(["dog","racecar","car"]))
console.log(getPrefix(["我艹cdog","我艹cecar","我艹car"]))
console.log(getPrefix(["racecar"]))


或者使用split分割判断都可。
cn00439805 2019-09-10
  • 打赏
  • 举报
回复
引用 2 楼 scscms太阳光 的回复:
    //正则匹配简单但没性能
    function getPrefix(arr) {
        if (Array.isArray(arr)) {
            let len = arr.length
            if (len > 1) {
                let reg = arr.join(',').match(new RegExp('^(.+).*,' + Array(len - 1).fill('\\1.*').join(',')))
                return reg ? reg[1] : ''
            } else {
                return arr[0]
            }
        }
    }
    console.log(getPrefix(["flower","flow","flight"]))
    console.log(getPrefix(["dog","racecar","car"]))
    console.log(getPrefix(["我艹cdog","我艹cecar","我艹car"]))
    console.log(getPrefix(["racecar"]))
console.log(getPrefix([])) //出错
cn00439805 2019-09-10
  • 打赏
  • 举报
回复
引用 1 楼 文盲老顾 的回复:
function prefix(arr){
	var r = ''
	if (arr.sort)
	{
		r = arr[0].toLowerCase()
		for(var i=1;i<arr.length;i++){
			var x='';
			for(var j=0;j<r.length&&j<arr[i].length;j++){
				if (r[j]==arr[i].toLowerCase()[j])
				{
					x+=r[j]
				}else{
					break
				}
			}
			r=x
			if (!x)
			{
				break;
			}
		}
	}
	return r
}
alert(prefix(['xxoo','xxuroo','xxalloo','xxinoo']))
alert(prefix([])) //出错
scscms太阳光 2019-09-10
  • 打赏
  • 举报
回复
    //正则匹配简单但没性能
function getPrefix(arr) {
if (Array.isArray(arr)) {
let len = arr.length
if (len > 1) {
let reg = arr.join(',').match(new RegExp('^(.+).*,' + Array(len - 1).fill('\\1.*').join(',')))
return reg ? reg[1] : ''
} else {
return arr[0]
}
}
}
console.log(getPrefix(["flower","flow","flight"]))
console.log(getPrefix(["dog","racecar","car"]))
console.log(getPrefix(["我艹cdog","我艹cecar","我艹car"]))
console.log(getPrefix(["racecar"]))
文盲老顾 2019-09-10
  • 打赏
  • 举报
回复
function prefix(arr){
	var r = ''
	if (arr.sort)
	{
		r = arr[0].toLowerCase()
		for(var i=1;i<arr.length;i++){
			var x='';
			for(var j=0;j<r.length&&j<arr[i].length;j++){
				if (r[j]==arr[i].toLowerCase()[j])
				{
					x+=r[j]
				}else{
					break
				}
			}
			r=x
			if (!x)
			{
				break;
			}
		}
	}
	return r
}
alert(prefix(['xxoo','xxuroo','xxalloo','xxinoo']))

87,903

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧