给你两个字符串 haystack
和 needle
,请你在 haystack
字符串中找出 needle
字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle
不是 haystack
的一部分,则返回 -1
。
标签:String,needle,Pipeixiabiao,3.25,scanner,haystack,Scanner From: https://www.cnblogs.com/wangzelin/p/18095326
package org.example;
import java.util.Scanner;
class Pipeixiabiao {
public static String strStr(String haystack, String needle) {
String f = null;
int n = haystack.length(), m = needle.length();
for (int i = 0; i + m <= n; i++) {
boolean flag = true;
for (int j = 0; j < m; j++) {
if (haystack.charAt(i + j) != needle.charAt(j)) {
flag = false;
break;
}
}
if (flag) {
return needle;
}
}
return f;
}
public static void main(String[] args) {
Pipeixiabiao pipeixiabiao =new Pipeixiabiao();//实例化solution的对象
Scanner scanner = new Scanner(System.in);//System.in 负责读入控制台输入的文本
String haystack=scanner.nextLine();//scanner.nextLine() 是 Java 中 Scanner 类的一个方法,用于读取用户从控制台输入的一行文本。这个方法会读取从当前位置到下一个换行符(\n)之间的所有字符,包括任何空格、制表符或其他空白字符,并将它们作为一个完整的字符串返回。
String needle =scanner.nextLine();
String strStr=Pipeixiabiao.strStr(haystack,needle);
System.out.println(strStr);
}
}
这段代码返回的是相同的字符串(短的一个,在有相同的前提下)
这是暴力解法,依次匹配对比主串和子串的每一个元素是否相同,若相同就向后继续对比,直到匹配完字串,或者出现不同.
图示最浅显易懂的 KMP 算法讲解_哔哩哔哩_bilibili
另外还有时间复杂度更低的解法kmp算法,明天再学