我需要实现string.IndexOf功能,而不使用任何与内置方法相关的c#字符串搜索。
你能为此建议一个简单的算法吗?搜索不涉及非常大的字符串。您可以假设要搜索的字符串的最大长度为1000个字符。
答案 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
,那么是否表明您的匹配循环可能会如何构建?