?Implement strStr()
来源:互联网 发布:快压解压缩软件 编辑:程序博客网 时间:2024/06/01 09:40
直截了当的办法很好懂,这个叫Brute force,O(nm) runtime, O(1) space,就是一个一个对.....
public int strStr(String haystack, String needle) { // 从heystack开始 for (int i = 0; ; i++) { // 匹配needle的字符 for (int j = 0; ; j++) { // 如果needle和j一样长,则直接返回i(当前匹配的起始位置),因为已经匹配成功了 if (j == needle.length()) { return i; } // 如果i+j为当前haystack的长度,则表明已经走完heystack所有的字符,并且没有匹配成功(注意如果最后一个字符正好匹配成功,则在上面一个判断就会返回) if (i + j == haystack.length()) { return -1; } // 如果当前needle和haystack的字符相同的话(因为每次不成功匹配不成功,则i移动1位,而j又重新从0开始,所以haystack的当前位置是i+j) if (needle.charAt(j) != haystack.charAt(i + j)) { break; }}}}
我的办法如下,画了个问号是我看懂了KMP但是没有用KMP来实现.....
class Solution {public: int strStr(string haystack, string needle) { int n1=haystack.size(); int n2=needle.size(); int flag; for(int i=0;i<n1-n2+1;i++) { flag=0; for(int j=0;j<n2;j++) { if(haystack[i+j]!=needle[j]) { flag=1; break; } } if(flag==0) return i; } return -1; }};
0 0