描述
對于一個給定的 source 字符串和一個 target 字符串,你應(yīng)該在 source 字符串中找出, target 字符串出現(xiàn)的第一個位置(從0開始)避归。如果不存在,則返回 -1。
樣例:
如果 source = "source" 和 target = "target"价认,返回 -1缤底。
如果 source = "abcdabcdefg" 和 target = "bcd"顾患,返回 1。
說明:
在面試中我是否需要實現(xiàn)KMP算法个唧?
不需要江解,當這種問題出現(xiàn)在面試中時,面試官很可能只是想要測試一下你的基礎(chǔ)應(yīng)用能力徙歼。
當然你需要先跟面試官確認清楚要怎么實現(xiàn)這個題犁河。
挑戰(zhàn):
O(n2)的算法是可以接受的鳖枕。如果你能用O(n)的算法做出來那更加好。(提示:KMP)
代碼
時間復(fù)雜度O(m * n) m = source.length(), n = target.length()
class Solution {
public int strStr (String source, String target) {
if (source == null || target == null) {
/* 異常條件不寫成 source == null || source.length == 0
* 原因是 source桨螺,target 都為空集時應(yīng)返回 0耕魄,不是 -1
*/
return -1;
}
// 注意 i 的邊界條件中的加 1
for (int i = 0; i < source.length() - target.length() + 1; i++) {
// 先定義 j,若僅在 for 循環(huán)中定義 j 則后面遇到 j 會報錯
int j = 0;
for (j = 0; j < target.length(); j++ ) {
// 滿足條件時直接終止內(nèi)層 for 循環(huán)
if (source.charAt(i + j) != target.charAt(j)) {
break;
}
}
if (j == target.length()) {
return i;
}
}
return -1;
}
}
Java中l(wèi)ength屬性是針對數(shù)組而言的彭谁,而length()方法是針對字符串而言的吸奴,size()方法是針對集合而言的