#!/usr/bin/env python # -*- coding:UTF-8 __author__ = 'shenshijun' def match(origin, pattern): origin_len = len(origin) pattern_len = len(pattern) def build_next(): _next_list = [0 for x in xrange(pattern_len)] last_match = 0 for cur_index in xrange(1, pattern_len): while last_match > 0 and pattern[last_match] != pattern[cur_index]: last_match = _next_list[last_match] if pattern[last_match] == pattern[cur_index]: last_match += 1 _next_list[cur_index] = last_match return _next_list origin_index, pattern_index = 0, 0 next_list = build_next() while origin_index < origin_len: # whileéè¦æ¾å¨åé¢ï¼å¦ææ¾å¨åé¢çè¯ä¸æå¹é çæ åµä¸pattern[pattern_index]å°±ä¼è¶ç while pattern_index > 0 and origin[origin_index] != pattern[pattern_index]: pattern_index = next_list[pattern_index] if pattern[pattern_index] == origin[origin_index]: pattern_index += 1 origin_index += 1 if pattern_index == pattern_len: return origin_index - pattern_len def main(): print match("assssbsss", 'sb') if __name__ == "__main__": main()