如何从字符串中删除重复的字符,但有 'good' 或 'cool' 等例外?

How to remove repeated chars from string but with exceptions like 'good' or 'cool'?

我正在尝试从类似的字符串中删除重复的字符 我喜欢这个。太棒了太棒了。

输出如下: 我喜欢这个。太棒了,很好。

我已经在 PHP 中使用了这条指令 $str=preg_replace("/(.)\1+/", "$1", $str);

但是它输出 我喜欢这个。这很棒。太神了

问题出在已经应该有重复字符的单词中,例如 'good' 或 'cool'

既然你开始使用正则表达式,你可以继续使用正则表达式。

使用 negative look-behind & negative look-ahead 检查重复字母前后是否有您不想匹配的内容。

$str = preg_replace('/(?<!g|c)(\w)+(?!d|l)/', '', $str);

不幸的是,这意味着要编写一个可能的前缀和后缀列表。

我想你可以在 Trie 词典中存储允许的单词(如 "good" 和 "cool")。

无论何时检查一个单词是否有重复字符,您都应该允许重复字符,直到字典仍然有一些带有该前缀的有效单词。

当字典中没有有效的前缀词时,您可以从

上的那个点删除重复的字符

例如:如果您要检查的单词是 "Goooood"

在 trie 中检查 "Go" 它将 return "God" 和 "Good" 作为有效词
检查trie中的"Goo",它将return "Good"作为有效词
在 trie 中检查 "Gooo",它会说没有有效的单词

因此,您最多保留 "Goo" 并删除其余的 o's