计蒜客 寻找字符串

题目:

思路:

刚开想的是逐个比较,但是自己觉的比较麻烦,看提示说是

根据提示想的是 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 ...考虑的太多 所以会超时

猜你喜欢

转载自blog.csdn.net/l1094125040/article/details/86288271
今日推荐