字符串的应用举例

问题:给定两个字符串,如何确保这两个字符串长度相等,并且字符串儿中不同字符出现的个数不能超过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个,就说明是符合题意的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值