赛码在线编程 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);
}
}
}
}