正则表达式找到由字母组成的单词

时间:2016-09-07 09:46:08

标签: c# regex unity5

我有一个谜题,玩家需要使用现有9个字母的单词来制作尽可能多的单词。假设你有“瀑布”。拿字母和重新排列可以使晶圆缺陷等。

目前,我在单词列表中使用了这样的表达式:

RJSONIO::fromJSON(jsonOutput,unexpected.escape = "keep")

但问题是,这也允许只出现一次的字母,使用两次,如免费软件(三个Es)和破烂(三个Ts)。< / p>

截至目前,我只是迭代我的单词列表并计算字母,确保建议的单词不包含比我的原始单词更高的每个字母数。但这似乎有点令人厌倦,我的直觉告诉我,应该可以确保表达式实际上只使用每个字母一次(或两次,如L,如果它在原始单词中两次)。

我查看了文档,但这对我来说非常希望,并且想知道可爱的堆叠器是否有建议。

1 个答案:

答案 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);
}