字符串的应用举例

2017-08-10  本文已影响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个,就说明是符合题意的。

上一篇下一篇

猜你喜欢

热点阅读