Binary String Matching

描述:

Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear as a substring of B? For example, the text string B is ‘1001110110’ while the pattern string A is ‘11’, you should output 3, because the pattern A appeared at the posit

输入:
The first line consist only one integer N, indicates N cases follows. In each case, there are two lines, the first line gives the string A, length (A) <= 10, and the second line gives the string B, length (B) <= 1000. And it is guaranteed that B is always longer than A.
输出:
For each case, output a single line consist a single integer, tells how many times do B appears as a substring of A.
样例输入:
3
11
1001110110
101
110010010010001
1010
110100010101011 
样例输出:
3
0
3 
import java.util.Scanner;

public class No5 {

    private int stringCheck(String aStr, String bStr) {
        try {
            StringBuffer aSB = new StringBuffer(aStr);
            StringBuffer bSB = new StringBuffer(bStr);
       // 窗口滑动次数
int step = bStr.length() - aStr.length() + 1;
       // 模拟滑动窗口
int window = aStr.length(); int equalCount = 0; for (int i = 0; i < step; i++) { int result = ((String) bStr.subSequence(i, i + window)) .compareTo(aStr); if (result == 0) { equalCount++; } } return equalCount; } catch (RuntimeException e) { } return -1; } public static void main(String args[]) throws Exception { try { Scanner cin = new Scanner(System.in); int num = cin.nextInt(); int[] result = new int[num]; No5 no5 = new No5(); for (int i = 0; i < num; i++) { String aStr = cin.next(); String bStr = cin.next(); result[i] = no5.stringCheck(aStr, bStr); } for (int i = 0; i < num; i++) { System.out.println(result[i]); } } catch (RuntimeException e) { } } }

 

你可能感兴趣的:(String)