如何从字符串中删除重复的字符,但有 '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
我正在尝试从类似的字符串中删除重复的字符 我喜欢这个。太棒了太棒了。
输出如下: 我喜欢这个。太棒了,很好。
我已经在 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