对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。
说明:在面试中我是否需要实现KMP算法?
- 不需要,当这种问题出现在面试中时,面试官很可能只是想要测试一下你的基础应用能力。当然你需要先跟面试官确认清楚要怎么实现这个题。
- 样例
如果 source = "source" 和 target = "target",返回 -1。
如果 source = "abcdabcdefg" 和 target = "bcd",返回 1。
O(n2)的算法是可以接受的。如果你能用O(n)的算法做出来那更加好。(提示:KMP)
public class strStr {
/**
* 解决思路:首先我们有source字符串和target字符串,source字符串最后的几个字符串长度小于target肯定不会有首次出现的可能。
* 所以应该进行遍历操作的source字符串的长度是(source.length-target.length)的长度。
* 在上面那个遍历中,我们可以获取source的position获取具体字符,再将target的所有字符串进行遍历,如果第一个字符与source的相同
* 那么
* ,继续下一个target及下一个source中的字符进行对比,直到target.length次后如果完全想同则返回外层遍历那个position,
* 如果不同则返回上层遍历,postion+1,继续进行target的比对操作,如果全部没有则返回-1;
* 时间复杂度为:O(n^2)
*/
public int solution(String source, String target) {
if (source == null || target == null) {
return -1;
}
for (int i = 0; i <= source.length() - target.length(); i++) {
int j = 0;
for (j = 0; j < target.length(); j++) {
if (source.charAt(i + j) != target.charAt(j))
break;
}
if (j == target.length()) {
return i;
}
}
return -1;
}
}
网友评论