赛码在线编程 2268 字符判断

赛码在线编程 2268 字符判断

题目:




解题思路:本题目的难点在于b串在比较过程中需要“回溯”。

比如:a串:aababbcddd

      b串:aabbdd

      在比较时对于a串而言,下标是始终在移动的;b串只有在比较相等的情况下才会移动。

并且,对于b串在出现重复字符无法匹配的情况时,要回溯到合适的位置:b串第一次比较到bb的时候,发现a串第一次只出现一个字符‘b’,那么此时b串就需要回溯到下标2(从0开始)。


源码如下:

	package sanma;
	
	import java.util.Scanner;
	
	public class Main {
		public static void main(String[] args) {
			String a,b;
			@SuppressWarnings("resource")
			Scanner scan = new Scanner(System.in);
			while(scan.hasNextLine()){
				a = scan.nextLine();
				b = scan.nextLine();
				char c = ' ';//记录b上一个字符下标
				
				int i = 0,j = 0,temp = 0;//temp记录b回溯的位置
				for(;j < a.length();j++){
					if(i == 0){
						if(b.charAt(i) == a.charAt(j)){
							c = b.charAt(0);
							i++;
							temp = 0;
						}
					}
					else{
						if(c == b.charAt(i)){
							if(b.charAt(i) != a.charAt(j)){
								i = temp;
							}
							else{
								i++;
							}
						}
						else{
							temp = i;
							c = b.charAt(i);
							if(b.charAt(i) == a.charAt(j)){
								i++;
							}
						}
					}
					
					/*防止b越界*/
					if(i == b.length()){
						break;
					}
				}
				if(i == b.length()){
					System.out.println(1);
				}
				else{
					System.out.println(0);
				}
			}
			
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值