手动实现string.IndexOf

时间:2012-07-08 22:50:16

标签: c# algorithm data-structures

我需要实现string.IndexOf功能,而不使用任何与内置方法相关的c#字符串搜索。

你能为此建议一个简单的算法吗?搜索不涉及非常大的字符串。您可以假设要搜索的字符串的最大长度为1000个字符。

3 个答案:

答案 0 :(得分:4)

因为这听起来像家庭作业,我会提供指导而不是解决方案。维基百科上的字符串搜索算法有很好的概述:

http://en.wikipedia.org/wiki/String_searching_algorithm

尝试将Naïve字符串搜索作为对该主题的良好介绍。

  

查看一个字符串出现位置的最简单且效率最低的方法   在另一个内部是检查每个地方,一个接一个地看   如果它在那里。首先,我们看看是否有针的副本   大海捞针的第一个特征;如果没有,我们会看看是否有   从大海捞针的第二个角色开始的针的副本;   如果没有,我们首先看第三个角色,依此类推。在里面   正常情况下,我们只需要查看每个字符的一个或两个字符   错误的位置,看到它是一个错误的位置,所以在平均水平   例如,这需要O(n + m)步,其中n是大海捞针的长度   m是针的长度;但在最坏的情况下,搜索   对于像“aaaaaaaaab”这样的字符串中的“aaaab”这样的字符串,它需要   O(nm)步骤。

答案 1 :(得分:0)

您是否尝试过查看其他语言的实现?例如。爪哇?

这些的源代码可以广泛使用,向专家学习总是迈出良好的第一步。

答案 2 :(得分:0)

另一个好的指导是考虑“我可以避免一些搜索吗?”例如,如果您的搜索字符串为aaaa且搜索的字符串为aaabaaaabaaa,并且您从位置[0]开始,您是否仍需要搜索位置[1]?

此外,哪个是搜索字符串中开始匹配的最佳字符?如果您的搜索字符串为abcd且搜索的字符串为aababceabcd,那么是否表明您的匹配循环可能会如何构建?