我有一个谜题,玩家需要使用现有9个字母的单词来制作尽可能多的单词。假设你有“瀑布”。拿字母和重新排列可以使晶圆,缺陷,左等。
目前,我在单词列表中使用了这样的表达式:
RJSONIO::fromJSON(jsonOutput,unexpected.escape = "keep")
但问题是,这也允许只出现一次的字母,使用两次,如免费软件(三个Es)和破烂(三个Ts)。< / p>
截至目前,我只是迭代我的单词列表并计算字母,确保建议的单词不包含比我的原始单词更高的每个字母数。但这似乎有点令人厌倦,我的直觉告诉我,应该可以确保表达式实际上只使用每个字母一次(或两次,如L,如果它在原始单词中两次)。
我查看了文档,但这对我来说非常希望,并且想知道可爱的堆叠器是否有建议。
答案 0 :(得分:3)
你不应该使用正则表达式,每次都要维护或生成自定义正则表达式。您可以使用此方法:
public static bool checker(string big, string small)
{
Dictionary<char, int> letterCount = new Dictionary<char, int>();
foreach (char c in big)
{
if (!letterCount.ContainsKey(c))
{
letterCount[c] = 0;
}
letterCount[c]++;
}
return small.All(letter => letterCount.ContainsKey(letter) && --letterCount[letter] >= 0);
}