和和For循环一起在Swift中

时间:2018-10-08 19:36:08

标签: swift

我想知道给定集合中有多少个常见字符。

Input: J = "aA", S = "aAAbbbb"
Output: 3

在python解决方案中,如下所示:

lookup = set(J)
return sum(s in lookup for s in S)

我在Swift中有以下解决方案,它可以工作,但看起来太罗word了。我想学习更短的方法。

class Solution {
    func checkInItems(_ J: String, _ S: String) -> Int {
        let lookup = Set(J) ;
        var sy = 0;
        for c in S
        {
            if lookup.contains(c)
            {
               sy += 1;                
            }
        }        
        return sy;
    }
}

2 个答案:

答案 0 :(得分:5)

作为Sh_Khan's answer的一个小变体,您可以使用reduce来 计算匹配元素的数量而无需创建中间元素 数组:

func checkInItems(_ J: String, _ S: String) -> Int {
    let lookup = Set(J)
    return S.reduce(0) { lookup.contains($1) ? $0 + 1 : $0 }
}

在Swift 5中,将有一个count(where:)序列方法用于此目的, 参见SE-0220 count(where:)

答案 1 :(得分:2)

您可以尝试

class Solution {
  func checkInItems(_ J: String, _ S: String) -> Int {
    let lookup = Set(J)
    return S.filter { lookup.contains($0) }.count
  }
}