【问题标题】:Regex to find words made of set of letters正则表达式查找由一组字母组成的单词
【发布时间】:2017-01-14 22:41:15
【问题描述】:

我有一个谜题,玩家需要使用现有的 9 个字母单词的字母拼出尽可能多的单词。假设您有“瀑布”。取字母并重新排列,您可以制作出 waferflawleft 等。

目前,我在我的单词列表中使用如下所示的表达式:

^(?:([waterfall])(?!.*?1)){1,9}$

但问题在于,这也允许只出现一次的字母被使用两次,例如 freeware(三个 E)和 tatter(三个 T)。

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

我查看了文档,但对我来说这一切都相当希腊化,并且想知道可爱的堆垛机是否有建议。

【问题讨论】:

标签: c# regex unity5


【解决方案1】:

您不应该为此使用正则表达式,每次都维护或生成自定义正则表达式将是地狱。你可以使用这个方法:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多