当前位置: 首页 > 知识库问答 >
问题:

消除字符串中的连续重复项

罗业
2023-03-14

我想从字符串中消除连续重复,如f"aaabbbcccdeefgggg"="abcdefgggg"

这是我的密码

f :: String -> String
f "" = ""
f "_" = "_"
f (x : xs : xss)
    | x == xs   = f (xs : xss)
    | otherwise = x : f (xs : xss)

我得到了错误非穷举模式,我想这是第二行的错误,当只剩下1个字符时,程序不知道如何处理。我该怎么修?

共有3个答案

乐正意智
2023-03-14

或者,如果你不处理那些可能无法处理的事情,你可以让事情变得更简单:

f :: String -> String
f (x:y:xs) | x == y = f (y:xs)
f (x:xs) = x:f xs
f _ = ""
冀嘉木
2023-03-14

这是对你问题“标题”的回答。

您只需将相等的字母分组,然后取每组中的第一个:

map head $ Data.List.group "aaabbbcccdeefgggg"

为了完整起见,因为你似乎是哈斯克尔的新手,这里有一些细节:

  • 数据。列表组“aaabbbccdeefggg”返回[“aaa”、“bbb”、“ccc”、“d”、“ee”、“f”、“gggg”]
徐淳
2023-03-14

“\ucode>模式不匹配任何字符的字符串,它匹配包含下划线的字符串。

您可以使用[\u]作为单例字符串的模式,因此:

f :: String -> String
f "" = ""
f s@[_] = s
f (x : xs : xss)
    | x == xs   = f (xs : xss)
    | otherwise = x : f (xs : xss)

这里我们使用s@捕获一个字符作为s的字符串。

或者我们可以通过以下方式简化:

f :: String -> String
f (x : xs : xss)
    | x == xs   = f (xs : xss)
    | otherwise = x : f (xs : xss)
f s = s

 类似资料:
  • 我目前正在解决以下黑客问题https://www.hackerrank.com/challenges/reduced-string/problem,在给定字符串的情况下,我必须消除相同的字符对。 我的代码如下: 它在大多数情况下都能工作,但是在某些测试用例中,比如如果字符串是“baab”,代码输出“bb”(baab应该简化为bb,然后变成空字符串),而不是空字符串,但是我不明白为什么会这样。

  • 示例: 1)“aaabbaa”:b和a 2)“aabbaa”:a和b和a 3)“abba”:b 我尝试的代码: String str=“aabbbbcccd”; Pattern p=Pattern.compile(“(\w){2}”); 匹配器m=p.Matcher(str); 当(m.find()) { system.out.println(M.group(1)); } 输出: A B B C

  • 本文向大家介绍JS字符串去除连续或全部重复字符的实例,包括了JS字符串去除连续或全部重复字符的实例的使用技巧和注意事项,需要的朋友参考一下 js字符串去除连续重复字符 ()和\number 配合使用表示重复正则第number个括号内匹配到的内容,如:(\d)\1表示重复第一个匹配块(\d)即等价于如果(\d)匹配到a,则表达式为aa 相应的可以:(some)\1* 或(some)\1+或(some

  • 问题内容: 在一次采访中,要求用Java编写代码以显示没有连续重复字符的字符串。 例如:谷歌,苹果,亚马逊;它应该显示“ Amazon” 我写了代码,发现继续重复char。有什么算法或有效的方法可以找到它吗? 问题答案: class replace { 逻辑:将字符串中的字符与上一个字符进行匹配。 如果找到string [i] == string [i-1]。打破循环。选择下一个字符串。 如果您到

  • 问题内容: 我有像这样的字符串“ aaaabbbccccaaddddcfggghhhh”,我想删除重复的字符,得到像这样的字符串“ abcadcfgh”。 一个简单的实现是: 使用正则表达式是否可能有更好的实现? 问题答案: 你可以这样做: 正则表达式使用反向引用和捕获组。 正常的正则表达式是,但是您必须在Java中使用另一个反斜杠来使反斜杠转义。 如果您想要重复的字符数: 演示版

  • 我需要编写一个静态方法,该方法将作为参数,并返回一个新的。例如,如果我将“Maaaakkee”作为输入,它将返回“make”。我已经尝试了下面的代码,但它似乎没有显示最后一个字符。下面是我的代码: