codeforces 822B(Crossword solving) Java

来源:互联网 发布:好搜排名优化软件 编辑:程序博客网 时间:2024/05/21 22:32

字符串比较。暴力解决即可!!!

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.util.Scanner;/** * 题意:最少需要替换几个 A 中的字符,使得 A 为 B 的子串,然后输出替换的个数和位置 *  * @author tinydolphin * */public class Main {    public static void main(String[] args) {        Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));        int strALength;        int strBlength;        int min;        String strA;        String strB;        int count;        int[] tempList;        int[] list;        while (in.hasNext()) {            strALength = in.nextInt();            strBlength = in.nextInt();            strA = in.next();            strB = in.next();            // 初始化            tempList = new int[strALength + 1];            list = new int[strALength + 1];            min = Integer.MAX_VALUE;            // 整段比较,维护替换个数的最小值。            for (int indexI = 0; indexI <= strBlength - strALength; indexI++) {                count = 0;                for (int indexJ = 0; indexJ < strALength; indexJ++) {                    if (strA.charAt(indexJ) != strB.charAt(indexI + indexJ)) {                        tempList[++count] = indexJ + 1;                    }                }                if (count < min) {                    min = count;                    System.arraycopy(tempList, 1, list, 1, count);// 最优数组复制方式                }            }            // 以下代码用作 输出结果            out.println(min);            for (int index = 1; index <= min; index++) {                out.print(list[index]);                out.print(index == min ? "\n" : " ");            }        }        out.flush();    }}