博主并没有什么算法基础,所以写的不好,勿喷,抛砖引玉,欢迎交流,感谢。
//实现 strStr() 函数。
// 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如
//果不存在,则返回 -1。
// 示例 1:
// 输入: haystack = "hello", needle = "ll"
//输出: 2
// 示例 2:
// 输入: haystack = "aaaaa", needle = "bba"
//输出: -1
// 说明:
// 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
// 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
// Related Topics 双指针 字符串
// 👍 565 👎 0
package com.zqh.leetcode.editor.cn;
//Java:实现 strStr()
public class P28ImplementStrstr {
public static void main(String[] args) {
Solution solution = new P28ImplementStrstr().new Solution();
// System.out.println(solution.strStr("hello", "ll"));
// System.out.println(solution.strStr("aaa", "aaaa"));
System.out.println(solution.strStr("aaaaa", "bba"));
// System.out.println(solution.strStr("mississippi", "pi"));
// TO TEST
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int strStr(String haystack, String needle) {
// 方案1:indexOf
// return haystack.indexOf(needle);
// 超级慢的方案二:先获取所有与needle等长的字符串,然后在判断是否一致
// if ("".equals(needle) || haystack.equals(needle)) {
// return 0;
// }
// if (haystack.length() < needle.length()) {
// return -1;
// }
// String[] split = haystack.split("");
// String[] array = new String[split.length - needle.length() + 1];
// for (int i = 0; i < split.length - needle.length() + 1; i++) {
// array[i] = split[i];
// for (int j = 1; j < needle.length(); j++) {
// array[i] += split[i + j];
// }
// if (array[i].equals(needle)) {
// return i;
// }
// }
// return -1;
// 方案三:使用char[]直接在循环里面判断
if ("".equals(needle) || haystack.equals(needle)) {
return 0;
}
if (haystack.length() < needle.length()) {
return -1;
}
char[] haystackChars = haystack.toCharArray();
char[] needleChars = needle.toCharArray();
for (int i = 0; i < haystackChars.length - needleChars.length + 1; i++) {
boolean flag = true;
for (int j = 0; j < needleChars.length; j++) {
if (haystackChars[i + j] != needleChars[j]) {
flag = false;
break;
}
}
if (flag) {
return i;
}
}
return -1;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}