題目:
實(shí)現(xiàn) strStr() 函數(shù)。
給定一個(gè) haystack 字符串和一個(gè) needle 字符串,在 haystack 字符串中找出 needle 字符串出現(xiàn)的第一個(gè)位置 (從0開始)。如果不存在,則返回 -1。
說明:
當(dāng) needle 是空字符串時(shí),我們應(yīng)當(dāng)返回什么值呢?這是一個(gè)在面試中很好的問題。
對(duì)于本題而言,當(dāng) needle 是空字符串時(shí)我們應(yīng)當(dāng)返回 0 。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。
示例:
示例 1:
輸入: haystack = "hello", needle = "ll"
輸出: 2
示例 2:
輸入: haystack = "aaaaa", needle = "bba"
輸出: -1
思路:
個(gè)人思路:先查找needle的第一位字符在haystack中的位置,然后判斷haystack從這個(gè)位置開始到needle長度的字符串是否等于needle,如果是,返回位置;
大神思路:KMP算法,是一種字符串匹配算法,目的就是在出錯(cuò)時(shí),利用原有的匹配信息,盡量減少重新匹配的次數(shù)。
https://leetcode-cn.com/problems/implement-strstr/solution/shen-ru-qian-chu-kmp-suan-fa-yu-ping-jie-by-zohary/
代碼:
class Solution {
public int strStr(String haystack, String needle) {
int index = -1;
int nLen = needle.length();
int hLen = haystack.length();
if (needle == null || needle.equals("")) return 0;
for (int i = 0; i < hLen; i++) {
if (needle.charAt(0) == haystack.charAt(i)) {
if ((i+nLen)<=hLen && haystack.substring(i,i+nLen).equals(needle)){
index = i;
break;
}
}
}
return index;
}
}

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/implement-strstr
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。