You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写计算两个字符串中公共元音数量的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 (elem vowels):筛选出字符串中的元音字符
  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:54:14