難度:容易
字符串查找(又稱查找子字符串),是字符串操作中一個很有用的函數。你的任務是實現這個函數。
對於一個給定的 source 字符串和一個 target 字符串,你應該在 source 字符串中找出 target 字符串出現的第一個位置(從0開始)。
如果不存在,則返回 -1
。
樣例
如果 source = "source"
和 target = "target"
,返回 -1
。
如果 source = "abcdabcdefg"
和 target = "bcd"
,返回 1
。
挑戰
O(n2)的算法是可以接受的。如果你能用O(n)的算法做出來那更加好。(提示:KMP)
說明
在面試中我是否需要實現KMP算法?
- 不需要,當這種問題出現在面試中時,面試官很可能只是想要測試一下你的基礎應用能力。當然你需要先跟面試官確認清楚要怎么實現這個題。
答案:
1 class Solution { 2 /** 3 * Returns a index to the first occurrence of target in source, 4 * or -1 if target is not part of source. 5 * @param source string to be scanned. 6 * @param target string containing the sequence of characters to match. 7 */ 8 public int strStr(String source, String target) { 9 if (source == null || target == null) { 10 return -1; 11 } 12 13 int i, j; 14 for (i = 0; i < source.length() - target.length() + 1; i++) { 15 for (j = 0; j < target.length(); j++) { 16 if (source.charAt(i + j) != target.charAt(j)) { 17 break; 18 } 19 } 20 if (j == target.length()) { 21 return i; 22 } 23 } 24 return -1; 25 } 26 }