-2

所以我的心都融化了。

我遇到的问题是我需要能够执行以下操作:

我有一个输入来定义我最多可以使用多少个通配符,在这个例子中我们说 2。

我有一个字符串,ABCDEFGH。

我需要创建一个数组,其中包含这 2 个通配符可以在字符串中使用的所有不同方式,以便我可以将其提供给 SQL 查询。

手工我们可以做到。

_BCDEFGH
A_CDEFGH
AB_DEFGH
ABC_EFGH
ABCD_FGH
ABCDE_GH
ABCDEF_H
ABCDEFG_

并使用我们的限制 2。

__CDEFGH
_B_DEFGH
_BC_EFGH
_BCD_FGH
_BCDE_GH
_BCDEF_H
_BCDEFG_
A__DEFGH
A_C_EFGH
A_CD_FGH
A_CDE_GH
A_CDEF_H
A_CDEFG_
AB__EFGH
AB_D_FGH
and so on...

为了与 SQL 兼容,我需要使用通配符作为下划线_。

有人可以帮我理解如何构建我的循环吗?请记住,通配符的限制并不总是 2,它是一个变量。

这不是正则表达式或匹配的问题,我需要能够创建字符串的这些变体。

4

1 回答 1

2

你得到这样的东西

 List<String> permutations(String original, int numberOfWildcards) {
        //add 1 more wildcard to each posible position in the original string
        List<String> perm = new List<String>();
        for (int i = 0; i < original.Length; ++i)
        {
            if (original[i] != '_')
                perm.Add(original.Substring(0, i) + "_" + original.Substring(i + 1, original.Length));
        }
        if ( numberOfWildcards == 1)
        {
              return perm;
        }

        //now if we need to search deeper we recusively do this for each substring
        List<String> permWithMoreWildmark = new List<String>();
        foreach (var str in perm)
        {
            permWithMoreWildmark.AddRange(permutations(str,numberOfWildcards-1));
        }
        return permWithMoreWildmark;
    } 

诀窍是先尝试解决 1 深的问题,然后尝试找出递归

于 2013-08-22T17:54:56.897 回答