题目:
思路:
刚开想的是逐个比较,但是自己觉的比较麻烦,看提示说是
根据提示想的是 indexOf 返回的的是字符串字串起始的位置 查询不到就返回-1,查询的到的话就返回查询到字串的起始位置。
然后起始位置+子串的长度 作为下一次查询的起始位置
代码如下:
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
String a = cin.nextLine();
String b = cin.nextLine();
int i= b.length()*-1+1;//为了让其实位置开始为0
int n =0;
while(true) {
i = a.indexOf(b, i+b.length()-1);//-1是到末尾字串的末尾起始
if(i <0 ) {
break;
}else {
n++;
}
}
System.out.println(n);
}
}
结果超时
最后看了视频发现 ,还得逐个比较才行
代码:
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner cin = new Scanner(System.in);
String a = cin.nextLine();
String b = cin.nextLine();
int n = 0;
for(int i = 0; i < a.length() - b.length() +1; i ++) {
//最后i+j会越界 所以-b.length 因为是从末尾起开始算 所以+1
boolean isMatch = true;
for(int j = 0; j <b.length(); j++) {
if(a.charAt(i+j) != b.charAt(j)) {
isMatch = false;
break;
}
}
if(isMatch == true) {
n++;
}
}
System.out.println(n);
}
}
个人感觉是因为 indexOf ...考虑的太多 所以会超时