LeetCode解题记录 —— LeetCode28 Implement strStr()

本题是要实现类似String的indexOf方法。即对于字符串str和pattern, 在str中找到第一个与pattern匹配的子串并返回该子串的第一个字符的位置,如果找不到则返回 -1。

通过Sunday方法,sunday方法通过偏移数组offset来确定如果当前子串str[index .. index + pattern.length() - 1]与pattern不匹配,下一个开始开始匹配的位置。offset数组中存储每个字符对应的偏移值。

offset数组通过以下方式生成:

  1. 如果字符c在字符串pattern中,则offset[c] = pattern.length() - "c在pattern中最后出现的位置"

  2. 如果字符c不再字符串pattern中,则offset[c] = pattern.length() + 1

以下举例说明offset数组怎么使用:

假如有字符串 str = "abcdeabcabf", pattern = "abf", 则开始str从index = 0开始匹配,当匹配到索引2时发现str[0 .. 2]与pattern不匹配,这时候应该从一个新的newIndex位置开始匹配,Sunday方法中这个新的位置就是 “子串的起始位置 + 当前子串的结束位置的下一个字符的偏移”,例中,当前子串的起始位置为0,当前用来匹配的子串为str[0 .. 2], 这个子串结束位置的以下各字符为str[3] = 'd', 因此newIndex = index + offset['d'], 然后从当前位置继续匹配。如果遇到一个匹配成功的子串则返回该子串的起始位置,如果遍历完后也没有匹配成功则返回-1

posted @ 2021-01-11 21:36  wflying  阅读(48)  评论(0)    收藏  举报