如何检查是否可以使用另一个字符串';c#中的s字符?

如何检查是否可以使用另一个字符串';c#中的s字符?,c#,asp.net,string,visual-studio,algorithm,C#,Asp.net,String,Visual Studio,Algorithm,我正在设计一个问题,在这个问题中,我想知道一个给定的字符串可以从另一个只使用一次字符的基字符串中找到(形成)多少次 如果我有 string str = "COMPUTER"; string basestr = "**TER** WITH **R** LABEL **COMPUTER** BELONGS TO **COMPUT** QUICK CUTE **COM** FOX JUM **P** S **U** R **T** H **E** LAZY DOG"; 所以我希望我的程序为这个st

我正在设计一个问题,在这个问题中,我想知道一个给定的字符串可以从另一个只使用一次字符的基字符串中找到(形成)多少次

如果我有

string str = "COMPUTER";

string basestr = "**TER** WITH **R** LABEL **COMPUTER** BELONGS TO **COMPUT** QUICK CUTE **COM** FOX JUM **P** S **U** R **T** H **E** LAZY DOG";
所以我希望我的程序为这个sting basestr返回3。 在这里,一台计算机显然是可用的,另一台是两个单词,最后一台是单词和字符

请帮我编程好吗? 我该怎么做?
谢谢

首先,为短字符串构造字符计数。然后为长字符串构造字符计数。对于短字符串的每个字符计数,将长字符串的计数除以短字符串的计数,只保留整数部分。选择最小的整数-它是您问题的答案

int[] Count(string s) {
    int[] res = new int[256];
    foreach (var c in s) {
        res[c]++;
    }
    return res;
}
int ShortInLong(string ss, string ls) {
    var sc = Count(ss);
    var lc = Count(ls);
    int res = int.MaxValue;
    foreach (var c in ss) {
        int d = lc[c] / sc[c]; // sc[c] is never 0 because of the way we constructed it
        res = Math.Min(res, d);
    }
    return res;
}

首先,为短字符串构造字符计数。然后为长字符串构造字符计数。对于短字符串的每个字符计数,将长字符串的计数除以短字符串的计数,只保留整数部分。选择最小的整数-它是您问题的答案

int[] Count(string s) {
    int[] res = new int[256];
    foreach (var c in s) {
        res[c]++;
    }
    return res;
}
int ShortInLong(string ss, string ls) {
    var sc = Count(ss);
    var lc = Count(ls);
    int res = int.MaxValue;
    foreach (var c in ss) {
        int d = lc[c] / sc[c]; // sc[c] is never 0 because of the way we constructed it
        res = Math.Min(res, d);
    }
    return res;
}

所以这更像是比较顺序不重要的字符集,对吗?@alexm:顺序不重要,但你需要一个接一个地重复从0到n的位置,直到什么都没有了;所以这更像是比较顺序不重要的字符集,对吗?@alexm:顺序不重要,但你需要一个接一个地重复从0到n的位置,直到什么都没有了;我可能想把东西还回去Count@Walkerneo谢谢从它返回的只有一个东西,方便地为result命名为
res
),有时我们可能没有任何str出现在basestring中。然后呢?你能告诉谁删除一个完全有根据的单词,这样我们就不算了吗again@ItsLockedOut当在长字符串中找不到短字符串组件时,代码将返回零。当短字符串为空时,算法将返回一个意外值:您将得到
int.MaxValue
,这是有意义的:任何字符串中都有无限多的空字符串。由于该算法不直接计算字数,因此不需要从长字符串中删除它们。可能需要在Count@Walkerneo谢谢从它返回的只有一个东西,方便地为result命名为
res
),有时我们可能没有任何str出现在basestring中。然后呢?你能告诉谁删除一个完全有根据的单词,这样我们就不算了吗again@ItsLockedOut当在长字符串中找不到短字符串组件时,代码将返回零。当短字符串为空时,算法将返回一个意外值:您将得到
int.MaxValue
,这是有意义的:任何字符串中都有无限多的空字符串。由于该算法不直接计算单词数,因此不需要从长字符串中删除它们。