我正在设计一个问题,我想找到一个给定字符串可以从另一个基本字符串中找到(形成)的次数,其中一个字符只使用一次。
假设我有
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 basetr返回3。 这里有一个COMPUTER,另一个是两个单词,最后是单词和字符。
请帮我编程吗? 我怎样才能做到这一点 ? 感谢
答案 0 :(得分: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;
}