我正在寻找一种编写算法来解决字母沙拉的方法。例如,如果我有字母
ZDFOG
并且知道我要搜索的单词是3个字符长,如果我只能使用每个字符一次,那么单词会匹配吗?
假设我有一个包含常用词的词典。
所以RegXx应与
匹配狗 狗 多雾路段 多雾路段 神 神
但是不应该匹配字符串,如果它们是字典的一部分,因为每个字母都应该包含一次:
FFO 斗 GGG
那么,是否有一种优雅的方式来查找字典中包含特定字符并具有特定长度的所有单词?
答案 0 :(得分:1)
目前还不清楚。
如果您的词典是常用词,为什么ffo doo Ggg
应该存在?
我认为使用C程序获得你想要的东西会更好。正则表达式不是算法语言。
无论如何,这就是您想要的: \b(([A-Za-z])((?!\2)[A-Za-z])((?!\2|\3)[A-Za-z]))\b
它只能捕获3个不同的字母单词。
证明:https://regex101.com/r/wAbT99/3
但你需要知道这种技术可能很慢。
答案 1 :(得分:0)
不考虑重复的字母,例如egg
,解决方案很简单;使用每个字母的锚定前瞻:
^(?=.*F)(?=.*O)(?=.*G).*
有了重复,有点丑陋:
^(?=.*E)(?=.*G.*G).*
您可以使用以下的一般解决方案:
^(?=(.*E){1})(?=(.*G){2}).*
重复次数{n}
是字母出现的次数是目标字.360