前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift 最长公共前缀 - LeetCode

Swift 最长公共前缀 - LeetCode

作者头像
韦弦zhy
发布2018-09-11 11:59:48
8700
发布2018-09-11 11:59:48
举报

LeetCode.jpg

题目: 最长公共前缀
描述:

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。

案例1:

代码语言:javascript
复制
输入: ["flower","flow","flight"]
输出: "fl"

案例2:

代码语言:javascript
复制
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:

所有输入只包含小写字母 a-z 。

方案一:将字符串转为[Character],第一个和第二个求最长前缀,前缀和第三个求最长前缀...
代码一:
代码语言:javascript
复制
func longestCommonPrefix(_ strs: [String]) -> String {
    
    if strs.isEmpty { return "" }
    if strs.count == 1 {
        return strs.first!
    }
    //将[String] -> [[Character]]
    var chars = strs.map{str in Array(str)}
    
    //求两个[Character] 的公共前缀
    func twoLongestCommonPrefix(_ str1: [Character], str2: [Character]) ->  [Character] {
        var index = 0
        var temp1 = [Character]()
        while index < str1.count && index < str2.count {
            if str1[index] == str2[index] {
                temp1.append(str1[index])
                index += 1
            } else {
                break
            }
        }
        return temp1
    }
    
    var temp = chars[0]
    for i in 1..<chars.count {
        if temp.isEmpty {
            break
        }
        temp = twoLongestCommonPrefix(temp, str2: chars[i])
        print(temp)
    }
    
    return String(temp)
}
执行用时:28ms
方案二:取出第一个字符串,使用后面的字符串判断第一个字符串是否是他们的前缀,不是则将第一个字符串长度减一,继续判断
代码二:
代码语言:javascript
复制
func longestCommonPrefix(_ strs: [String]) -> String {
    let count = strs.count
    
    if count == 0 {
        return ""
    }
    if count == 1 {
        return strs.first!
    }
    
    var result = strs.first!
    for i in 1..<count {
        while !strs[i].hasPrefix(result) {
            result = String(result.prefix(result.count - 1))
            if result.count == 0 {
                return ""
            }
        }
    }
    return result
}
执行用时:16ms

开始我想的是如果字符串长度是无序的,那么把字符串变为有序是可以提升效率的,所以我加了如下代码 进行排序

代码语言:javascript
复制
let s = strs.sorted{$0.count < $1.count}

但实际测试发现,效率并未提升、、、我忽略了排序的时间、、、、尴尬了

用Swift开始学习算法中,在LeetCode中开始做初级算法这一章节,将做的题目在此做个笔记,希望有更好方法同学们cue我哦。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.08.01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目: 最长公共前缀
    • 描述:
      • 说明:
        • 方案一:将字符串转为[Character],第一个和第二个求最长前缀,前缀和第三个求最长前缀...
          • 代码一:
          • 执行用时:28ms
        • 方案二:取出第一个字符串,使用后面的字符串判断第一个字符串是否是他们的前缀,不是则将第一个字符串长度减一,继续判断
          • 代码二:
          • 执行用时:16ms
          • 用Swift开始学习算法中,在LeetCode中开始做初级算法这一章节,将做的题目在此做个笔记,希望有更好方法同学们cue我哦。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档