欢迎访问宙启技术站
智能推送

使用Haskell编写一个函数来判断一个字符串是否是 的(即不含重复字符)。

发布时间:2023-12-10 08:48:10

要判断一个字符串是否是 的,可以遍历字符串中的每个字符,并使用一个集合来记录已经出现过的字符。如果遍历到的字符已经在集合中存在,则说明字符串含有重复字符,返回False;否则,将字符添加到集合中继续遍历。如果遍历完整个字符串都没有发现重复字符,则返回True。

以下是使用Haskell编写的函数实现:

import qualified Data.Set as Set

isUnique :: String -> Bool
isUnique str = go str Set.empty
  where go [] _ = True
        go (x:xs) seen
          | x Set.member seen = False
          | otherwise = go xs (Set.insert x seen)

这个函数使用了Haskell标准库中的Set模块,使用Set来实现集合的功能。函数isUnique接受一个字符串作为输入,并将其转换为一个字符列表进行处理。go函数是一个辅助函数,它接受当前待判断的字符列表和已经遍历过的字符集合作为参数。

函数go递归地处理字符列表,当遍历到空列表时,返回True表示没有发现重复字符。对于非空列表,我们首先检查当前字符是否已经在集合中出现过。如果是,则返回False表示出现了重复字符;否则,将当前字符添加到集合中,并继续递归处理剩余的字符列表。

这个函数的时间复杂度是O(n),其中n是输入字符串的长度。

下面是一些使用例子:

main :: IO ()
main = do
  putStrLn $ show $ isUnique "abcdefg"  -- True
  putStrLn $ show $ isUnique "hello"    -- False
  putStrLn $ show $ isUnique "123454321" -- False
  putStrLn $ show $ isUnique "world"    -- True

这个例子中,函数isUnique分别判断了四个字符串的 性,并将结果打印出来。输出结果为True表示字符串是 的,输出False表示字符串含有重复字符。