题目:
实现?strStr()?函数。
给你两个字符串?haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回??-1 。
说明:
当?needle?是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当?needle?是空字符串时我们应当返回 0 。这与 C 语言的?strstr()?以及 Java 的?indexOf()?定义相符。
示例 1:
输入:haystack = "hello", needle = "ll" 输出:2 示例 2:
输入:haystack = "aaaaa", needle = "bba" 输出:-1 示例 3:
输入:haystack = "", needle = "" 输出:0
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/implement-strstr 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
暴力解法:
package StrStr;
public class StrStr {
public int strStr(String haystack, String needle) {
//如果needle本身小于haystack,那直接返回-1
if (haystack.length() < needle.length()) {
return -1;
}
//如果needle为空,则返回0
if (needle.length() == 0) {
return 0;
}
int count = 0;
int result = 0;
int i = 0;
outer:
for (i = 0; i <= haystack.length() - needle.length(); i++) {
for (int j = 0; j < needle.length(); j++) {
//如果needle第j个字符与haystack第i+j个字符相等,那么计数+1
if (needle.charAt(j)==haystack.charAt(i+j)) {
count++;
//如果计数count等于needle长度,那么查找成功,break
if(count == needle.length()) {
result = count;
break outer;
}
}
}
//每轮外循环开始前,count都需要归零
count = 0;
}
if (result == needle.length()) {
return i;
}else {
return -1;
}
}
public static void main(String[] args) {
StrStr test = new StrStr();
String haystack = "aaaaa";
String needle = "bba";
System.out.println(test.strStr(haystack, needle));
}
}
KMP解法:
力扣https://leetcode-cn.com/problems/implement-strstr/solution/shua-chuan-lc-shuang-bai-po-su-jie-fa-km-tb86/
|