将主串M指定位置和目标串S开始位置进行对比,如果相同将M的下一个字符和S的下一个字符对比,如果不同则M的下一个字符和S的开始位置对比,直到S中每一个字符和M中的连续字符串相等,否则不匹配。
C#代码-->
private static int Index(string m,int pos, string s) { int m_len = m.Length; int s_len = s.Length; int i = pos-1; int j = 0; if (pos>m_len) { return -1; } while ( i<m_len && j<s_len) { if (m[i]==s[j]) { i++; j++; } else { j = 0; i = i - j + 1; } } if (j>=s_len) { return i - s_len; } else { return 0; } } //调用 int res = Index("asdfghjkl", 2, "fghjk"); Console.WriteLine(res);
复杂度为O(M*N)