?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
原创粉丝点击