【问题标题】:Depth scan of substring子串的深度扫描
【发布时间】:2014-07-09 10:47:22
【问题描述】:

很多时候,我看到一些代码被标记为“已解决”并获得了 70 多票,但在每种情况下,这都是解决方案的一部分。我对搜索算法有一点问题(比如说)

stringToSearch="aa";
sourceString="aaaaaa"; // len=6

来自网络的大多数解决方案将返回 3 次出现,错误结果是什么原因:

第一次出现 = sourceString[0], sourceString[1]

第二次出现 = sourceString[1], sourceString[2]

第三次出现 = sourceString[2], sourceString[3]

第 4 次出现 = sourceString[3], sourceString[4]

第 5 次出现 = sourceString[4], sourceString[5]

现在事情变得有点复杂......

编辑:问题是如何计算这些出现次数:)

【问题讨论】:

  • 不能从最后一个查找点开始重新搜索,直到字符串用完吗?
  • 我为此向你投了赞成票 :) 我不知道如何快速计算所有这些事件
  • 所以我必须像 sourceString-stringToSearch.Lenght+1 一样多次搜索字符串?
  • 你不能一直调用这样的东西直到你到达字符串的末尾吗? i = string.IndexOf("aa", i);
  • Aho-Corasick 字符串搜索算法将找到所有出现的地方。 “如何计数”真的取决于你。你真的在问如何找到它们吗?

标签: c# string algorithm search count


【解决方案1】:

类似的东西。

List<int> indexes = new List<int>();
for (int index = sourceString.indexOf(stringToSearch);
     index != -1;
     index = sourceString.indexOf(stringToSearch, index + 1)) {
  indexes.Add(index);
}

【讨论】:

  • 谢谢,代码又好又短 :) 我稍后会尝试删除我认为的列表 你能解释一下为什么 index.Add 在独立的括号中吗?
猜你喜欢
  • 2021-11-26
  • 2018-06-23
  • 2021-12-23
  • 2019-01-18
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
相关资源
最近更新 更多