面试题:字符串查找
难度:容易
字符串查找(又称查找子字符串),是字符串操作中一个很有用的函数。你的任务是实现这个函数。
对于一个给定的 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 }