我想从字符串中消除连续重复,如f"aaabbbcccdeefgggg"="abcdefgggg"
这是我的密码
f :: String -> String
f "" = ""
f "_" = "_"
f (x : xs : xss)
| x == xs = f (xs : xss)
| otherwise = x : f (xs : xss)
我得到了错误非穷举模式,我想这是第二行的错误,当只剩下1个字符时,程序不知道如何处理。我该怎么修?
或者,如果你不处理那些可能无法处理的事情,你可以让事情变得更简单:
f :: String -> String
f (x:y:xs) | x == y = f (y:xs)
f (x:xs) = x:f xs
f _ = ""
这是对你问题“标题”的回答。
您只需将相等的字母分组,然后取每组中的第一个:
map head $ Data.List.group "aaabbbcccdeefgggg"
为了完整起见,因为你似乎是哈斯克尔的新手,这里有一些细节:
数据。列表组“aaabbbccdeefggg”
返回[“aaa”、“bbb”、“ccc”、“d”、“ee”、“f”、“gggg”]
“\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”。我已经尝试了下面的代码,但它似乎没有显示最后一个字符。下面是我的代码: