Swift 14.LeetCode - Longest Common Prefix

目标:

1.实现LeetCode - 14.Longest Common Prefix

原题目:
Write a function to find the longest common prefix string amongst an array of strings.

解题思路:
首先,找出最短的字符串;
然后,将最短的字符串和其他每一个字符串作比较;
比较后,记录公共的前缀字符的位置和上一次记录做比较,得出最小的index;
使用最短字符串根据index,得到Longest Common Prefix

2.Swift4.0字符串新特性使用

Swift 4 新增了一个语法糖 ,可以对字符串进行单侧边界取子串。
去掉了 characters

题目实现:

  func longestCommonPrefix(_ strs: [String]) -> String {
        
        if strs.count < 1 {
            
            return ""
        }
        
        if strs.count == 1 {
            return ""
        }
        
        
        var stringArray : Array = strs
        //排序找出最短的字符串
        for i in (0 ..< stringArray.count-1){
            for j in (i + 1 ..< (stringArray.count)) {
                if stringArray[i].count >= stringArray[j].count {
                   stringArray.swapAt(i, j)
                }
            }
        }
        
        if stringArray[0] == "" {
            return ""
        }
        
        
        var distance = 0 //记录上一次位置的变量
        let shortString : String = stringArray[0] //第一个长度最短的字符串
        
        //将第一个最短的字符串和后边的每一个作比较,找出最短的前缀
        for i in (1 ..< stringArray.count) {
            var tempDistance = 0 //记录本次位置的变量 (每次比较都会置为0)
            
            for j in (1 ... shortString.count) { //将最短字符串每一个字符和每一个字符串的每一个字符作比较
                
                let tempString : String = stringArray[i]
                let shortindex  = shortString.index(shortString.startIndex, offsetBy: j)
                let tempindex  = tempString.index(tempString.startIndex, offsetBy: j)
                print(shortString, tempString)
                let a = String(shortString.prefix(upTo: shortindex))
                let b = String(tempString.prefix(upTo: tempindex))
                print(a, b)
                if shortString.prefix(upTo: shortindex) == tempString.prefix(upTo: tempindex) {
                    tempDistance = tempDistance + 1
                } else {
                    if j == 1 {
                        return "no prefix"
                    } else {
                        break
                    }
                }
            }
            
            if distance == 0 {
                distance = tempDistance
            }
            
            if (distance >=  tempDistance) {
                distance = tempDistance
            }
            tempDistance = 0
        }
        print("distance" , distance)

        let resultindex = shortString.index(shortString.startIndex, offsetBy: distance)
        print("resultindex" , resultindex)

        let resultSubstring = String(shortString.prefix(upTo: resultindex))
        print("resultSubstring" , resultSubstring)
        
        return String(resultSubstring)
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。