【问题标题】:How to check if a string can be obtained using another string's characters in c#?如何检查是否可以在c#中使用另一个字符串的字符来获取一个字符串?
【发布时间】:2012-01-22 01:28:05
【问题描述】:

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

假设我有

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。 在这里,一台 COMPUTER 显然是可用的,另一台是两个单词,最后一个是单词和字符。

请帮我编程? 我怎样才能做到这一点 ? 谢谢

【问题讨论】:

  • 所以它更像是比较顺序不重要的字符集,对吗?
  • @alexm : 顺序并不重要,但你需要从位置 0 到 n 一个接一个地重复,直到留下注释;

标签: c# asp.net string visual-studio algorithm


【解决方案1】:

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

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

【讨论】:

  • 可能想在 Count 中返回一些东西
  • @Walkerneo 谢谢!只有一件事可以返回,方便地命名为res for result :)
  • 有时我们在basestring中没有任何str。然后呢?你能告诉谁删除一个完全成立的词,这样我们就不会再算了
  • @ItsLockedOut 当在长字符串中找不到短字符串组件时,代码将返回零。当短字符串为空时,该算法将返回一个意外的值:您将得到int.MaxValue,这是有道理的:任何字符串中都有无限数量的空字符串。由于算法不直接统计单词​​,所以不需要从长字符串中删除。
猜你喜欢
  • 1970-01-01
  • 2013-05-12
  • 2011-02-07
  • 2012-03-13
  • 2019-05-11
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多