string的index方法,在字符串的操作上还是用的比较多的,但是内部的如何实现呢,这个具体用那种算法就不太清楚了。
正好碰到网上一篇关于
字符串搜索文章 ,作者提供了一个检索的思路,我就偷懒学习一下,呵呵。
大致的问题原型是就是indexof的实现问题
基本思路按照子串在原串中检索,如果遇到不匹配的情况,按照具体算法移动子串位置,一般就是移动一个字符的位置,但是那篇文章的作者提供了一个好的思路,如下图:
1 循环主串,如果匹配则返回。
否则定位当前主串长度和字串对齐后的第一个字符,如上图中打红圈的字符,
判断改字符在子串中是否含有,
如果没有就然后移动子串到该位置,然后循环匹配,如果匹配不成功,继续前一个过程。
如果含有,如上图中最后的字符u,则子串往前移动子串长-该字符在子串中位置,然后开始匹配,如果不成功继续前一个过程!
直到主串循环完毕!
我大致看了一下,其中比较的次数比常规方法还是少了很多!
另外还有一些类似的问题,比如子串在主串中连续出现次数最多的匹配,大致意思:部分匹配度,也就是说大致匹配的程度。
最满意的情况是 存在完全匹配,最差的情况是连单个字符都不匹配。
对了这个问题,我想基本思路可以采用上面提到的匹配算法,另外使用哈希表将当前子串分解,然后给每个字串一个值,按从长到短开始循环,每循环一次,就拿当前串雨哈希表对照更新次数。
循环完毕后,就知道每个字串的出现频率。
这里还有有个问题就是,如果把子串分成很多更小的串,最简单的就是使用循环,生成哈希表。我想的话其中key用来存字串,value存储频率。
应该还有更好的方法,继续研究。