String Haskell:计算字符串的中缀
我想数一数,字符串“egg”在给定字符串中的频率。 我只知道怎么数钱String Haskell:计算字符串的中缀,string,haskell,filter,count,String,Haskell,Filter,Count,我想数一数,字符串“egg”在给定字符串中的频率。 我只知道怎么数钱 easter :: String -> Int easter s = length $ filter (== 'e') s 示例:复活节“蛋”->5 提前谢谢你数数单词是很容易的。只需使用boyer-moore实现 import Data.Text.Internal.Search (indices) import qualified Data.Text as T easter :: String -> Int
easter :: String -> Int
easter s = length $ filter (== 'e') s
示例:复活节“蛋”->5
提前谢谢你数数单词是很容易的。只需使用boyer-moore实现
import Data.Text.Internal.Search (indices)
import qualified Data.Text as T
easter :: String -> Int
easter = length . indices (T.pack "egg") . T.pack
现在有趣的部分是自己编写算法。这是一个很好的学习练习,在算法类中很常见。试试看!第一次不必麻烦使用文本,只需像以前一样使用字符串,并遵循维基百科的文章。没有重叠的可能性,它就像
> let s="eggabcdefgegggzueggeggegg" in sum [1 | i <- tails s, take 3 i == "egg"]
5
>s=“eggabcdeffgegggzuegegggg”总之[1 | i记住字符串
只是一个[Char]
,模式匹配很简单
easter :: String -> Int
easter [] = 0
easter ('e':'g':'g':rest) = 1 + easter rest
easter (x:xs) = easter xs
空字符串中显然没有出现“egg”
如果字符串以“egg”开头,则至少出现1次。将其删除,然后检查字符串的其余部分
如果字符串以任何其他字符开头,请删除第一个字母并继续。查看数据部分。列出标准库
您希望构建一个函数,查看字符串中的每个点(请记住String
是[Char]
的类型别名),以查看它是否启动“egg”
我可以这样做
easter :: String -> Int
easter str = length $ filter (isPrefixOf "egg") (tails str)
允许重叠吗?“egegeg”有一个“egeg”还是两个?没有人,我想数一数每个相连的“egg”?那么“xoxox”中有多少个“xox”?我想他不是在要求广义实现。只有一个专用于“egg”。我没有想到这个特例,我想,用“egg”也没关系你没有这个案例,你知道吗,为什么它说:模块“Data.Text.Internal.Search”不导出“indicies”?因为它不是indicies
,而是indicies
(注意ie
与e
)。我将进行编辑以修复该打字错误。编辑:我还导入了符合条件的文本,以避免在长度上出现名称冲突。