美文网首页
字符串的应用举例

字符串的应用举例

作者: 落叶刺客 | 来源:发表于2017-08-10 18:33 被阅读4次
    问题:给定两个字符串,如何确保这两个字符串长度相等,并且字符串儿中不同字符出现的个数不能超过3个?

      上面的问题有两个限定条件:首先,两个字符串儿的长度要相等;其次,允许它们拥有不同的字符,但是不同字符存在的个数不能超过3个。顺着这两个限定条件,我们整理一下思路,很容易就能想出解决的方案。可以用guard或者if-else来对两个字符串儿进行校验,从而保证它们的长度相等。推荐使用guard,因为可以在两个字符串儿长度不相等时提前退出。接着可以用for...in对字符串儿进行遍历(可以只遍历一个字符串儿,也可以遍历两个字符串儿,不过最好是只遍历一个字符串儿),然后再对比它们的元素。用代码表示如下:

    func challenge(first: String, second: String) -> Bool {
        
        // 校验两个字符串长度是否相等
        guard first.characters.count == second.characters.count else { return false }
        
        // 创建字符串儿的字符集数组
        let firstArray = Array(first.characters)
        let secondArray = Array(second.characters)
        
        // 用于记录两个字符集数组中元素不相等的个数
        var differences = 0
        
        // 遍历firstArray中的元素,同时获取该元素在数组中的索引
        for (index, letter) in firstArray.enumerated() {
            
            // 如果firstArray中的元素letter与secondArray中的元素不等
            if secondArray[index] != letter {
                
                // 计数加1
                differences += 1
                
                // 当计数differences的值超过3时,就说明不符合题意,直接返回false
                if differences == 4 {
                    return false
                }
            }
        }
        return true
    }
    

      我们首先用guard确保了两个字符串儿长度相等,然后在此基础之上,利用这两个字符串儿分别创建字符集数组firstArray和secondArray。因为这两个数组的元素个数是相同的,所以在遍历的时候,没必要两个都遍历,只需遍历其中一个,并在此过程中,同时取出该元素在数组中的下标,然后再利用这个下标取出第二个数组中的元素,最后再比较遍历出来的元素和取出的元素是否相等就可以了,只要不等字符的数量不超过3个,就说明是符合题意的。

    相关文章

      网友评论

          本文标题:字符串的应用举例

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