实现查找字符串 Implement strStr()

你。 提交于 2020-03-12 17:40:15

问题:

Implement strStr().

Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Example 1:

Input: haystack = "hello", needle = "ll"
Output: 2

Example 2:

Input: haystack = "aaaaa", needle = "bba"
Output: -1

解决:

【注】strStr(String haystack, String needle):用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回 -1。

① 使用两个指针顺序遍历两个字符串的每一个元素即可。注意p1每次失败后只能移向第一个字符的下一个位置,否则会漏掉很多组合。

public class Solution{//14ms
    public int strStr(String haystack, String needle) {//子串是按顺序排放的
        if(needle.length() == 0) return 0;
        int p1 = 0;
        int p2 = 0;
        int fir = 0;//记录起始位置
        int next =1;
        int count = 0;//记录匹配的个数
        while(p1 < haystack.length()){
            if(haystack.charAt(p1) == needle.charAt(p2)){
                count ++;
                p1 ++;
                p2 ++;
            }else{
                count = 0;
                p2 = 0;
                p1 = next;
                fir = p1;
                next = fir + 1;
            }
            if(count == needle.length()) return fir;           
        }
        return -1;
    }
}

② 最简单的方法是直接调用String类的函数。

public class Solution {//6ms
    public int strStr(String haystack, String needle) {
        return haystack.indexOf(needle);
    }
}

③ 第①种方法的进化版。也调用了String类的方法。 

public class Solution {//6ms
    public int strStr(String haystack, String needle) {
        if(needle.equals(haystack) || needle.length() == 0) return 0;//字符串相等或者字串为空
        if(haystack.length() == 0 || haystack.length() < needle.length()) return -1;
        int len = needle.length();
        for(int i = 0; i < haystack.length(); i++){
            if(haystack.charAt(i) == needle.charAt(0)){
                if(i + len > haystack.length()) break;
                if(needle.equals(haystack.substring(i, i + len))) return i;
            }
        }
        return -1;
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!