10

简单的问题。

给定一个字符串,我希望能够输入一个字母,然后让我的函数计算该字母在字符串中出现的次数。

countLetters :: String -> Char -> Int

如何才能做到这一点?

4

2 回答 2

19

countLetters :: String -> Char -> Int
countLetters str c = length $ filter (== c) str

这仅获取strequal中的字符c,然后计算其长度。

于 2013-10-10T13:28:39.287 回答
2

这取决于您要拨打的电话数量 one String。简单的解决方案是只读取字符串中的每个字符,如果它与您要查找的字符匹配,则增加计数器。

现在,如果您使用计数器映射某些东西,您显然可以使用fold

countLetters xs x = foldl (\count char -> if char == x then (count + 1) else count) 0 xs

然而,如果你想做很多查询,首先建立查找表(即排序)更有意义。然后就可以得到in中任意字符的重复次数O(1)(整个算法还是O(n))。

于 2013-10-10T13:30:43.757 回答