如何编写计算两个字符串中公共元音数量的Haskell函数
计算两个字符串公共元音数量的Haskell实现
你的当前代码是统计两个字符串中所有元音的总个数,而不是两个字符串共有的不同元音的数量。要实现需求,核心是找出两个字符串各自包含的不同元音,再求它们的交集长度。
正确实现代码
首先需要导入Data.List模块中的nub(去重)和intersect(求交集)函数:
import Data.List (nub, intersect) import Data.Char (toLower) c_vow :: String -> String -> Int vowels = ['a', 'e', 'i', 'o', 'u'] -- 提取字符串中所有出现过的不同元音(忽略大小写) getUniqueVowels :: String -> [Char] getUniqueVowels = nub . filter (`elem` vowels) . map toLower c_vow xs ys = length $ intersect (getUniqueVowels xs) (getUniqueVowels ys)
代码说明
map toLower:统一把字符串转为小写,确保大写元音(比如"Hello"里的'E')和小写元音被视为同一个filter (elemvowels):筛选出字符串中的元音字符nub:去掉重复的元音,得到该字符串中所有出现过的不同元音intersect:找出两个元音列表的交集,也就是两个字符串都包含的元音length:计算交集的长度,即为公共元音的数量
测试示例
输入c_vow "Hello Joe" "Nice to meet you"时:
getUniqueVowels "Hello Joe"返回['e','o']getUniqueVowels "Nice to meet you"返回['i','e','o','u']- 交集为
['e','o'],长度是2,符合预期
如果不需要处理大小写,去掉map toLower即可。
内容的提问来源于stack exchange,提问作者Liam Neeson
相关产品推荐
相关产品推荐

