美文网首页
如何返回一个字符串中多个单词相同的前缀

如何返回一个字符串中多个单词相同的前缀

作者: 落叶刺客 | 来源:发表于2017-08-10 19:25 被阅读17次
    问题:给定一组单词,如何返回这些单词中最大的前缀?

      需要说明的是,这里所说的前缀并不是指英语语法里面的前缀,而是指多个单词前面出现的相同部分。比如说,abandonabandoned的最大前缀就是指“abandon”,而abandonabandonedabbreviation的最大前缀是“ab”。如果给一个英语字典,或者单词表就比较容易理解了:

    英语单词表.png

      解题过程中还是要使用for ... in遍历。具体的操作步骤是,先将字符串儿拆成完整的单词,然后再遍历某个单词中的字符,并且将其存储在一个临时数组中,与此同时取出其它单词,最后再用hasPrefix()函数来检验这些单词中是否包含临时数组中的字符,如果包含,那么这个临时数组中的字符就是它们的最大前缀。具体用代码实现如下:

    func challenge(input: String) -> String {
        
        // 将字符串儿分割成独立的单词(以空格为界)并返回一个以这些单词为元素的数组
        let parts = input.components(separatedBy: " ")  // 双引号中间有一个空格
        
        // 取出字符串儿数组parts中的第一个元素(单词)
        guard let first = parts.first else { return "" }
        
        // 用于存储从第一个单词first中遍历出来的字符
        var tmp = ""
        
        // 用于存储最大前缀字符
        var maxPrefix = ""
        
        // 遍历第一个元素first中的字符
        for letter in first.characters {
            
            // 将字符letter拼接到字符串儿tmp中
            tmp.append(letter)
            
            // 遍历数组parts中所有的元素(单词)
            for word in parts {
                
                // 如果元素(单词)中不存在前缀tmp
                if !word.hasPrefix(tmp) {
                    
                    // 直接返回maxPrefix
                    return maxPrefix
                }
            }
            
            // 将tmp赋值给maxPrefix
            maxPrefix = tmp
        }
        
        // 返回maxPrefix,也就是最大的前缀
        return maxPrefix
    }
    
    let str = "abide abiding abnormal abolish"
    challenge(input: str)  // 返回ab
    

      上面代码中所用的知识都比较基础,并且每一步代码都有详细的注释,所以这里就不再做进一步的分析了。

    相关文章

      网友评论

          本文标题:如何返回一个字符串中多个单词相同的前缀

          本文链接:https://www.haomeiwen.com/subject/gzxkrxtx.html