[BaekJoon]1120文字列


1.  質問リンク
https://www.acmicpc.net/problem/1120
2.  質問する

サマリ
長さが
  • と異なる文字列A、Bがあり、Aの前にBの長さに等しいまでアルファベットを追加したり、後にアルファベットを追加したりして、Bとの差が最も小さい差を求めます.ここで、差分は、同一位置に存在する文字の差分数である.
  • 入力
  • :AとBの最大長は50で、アルファベット小文字のB以下です.
  • 出力:AをBとの差の最大値に変換します.
  • 3.  ソースコード
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Main {
    	public int findMinDif(String a, String b) {
    		if(a.length() == b.length()) {
    			int count = 0;
    			for(int i = 0; i < a.length(); i++) {
    				if(a.charAt(i) != b.charAt(i)) {
    					count++;
    				}
    			}
    			return count;
    		}
    		int diff = Integer.MAX_VALUE;
    		int length_dif = b.length() - a.length() + 1;
    		for(int i = 0; i < length_dif; i++) {
    			int count = 0;
    			for(int j = 0; j < a.length(); j++) {
    				if(a.charAt(j) != b.charAt(i + j)) {
    					count++;
    				}
    			}
    			if(diff > count) {
    				diff = count;
    			}
    		}
    		return diff;
    	}
    	
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		String input = br.readLine();
    		StringTokenizer st = new StringTokenizer(input);
    		String a = st.nextToken();
    		String b = st.nextToken();
    		Main m = new Main();
    		System.out.println(m.findMinDif(a, b));
    	}
    }
    4.  に近づく
  • Aの長さがBの長さと等しい場合、Aはこれ以上変形できないので、文字列AとBの差を求める.この差は最大値です.
  • Aの長さがBの長さより小さい場合、Aとの差が最も小さい位置は、現在のBの文字列で検索される.
  • は、Aの間に文字を追加することができず、与えられたAの前後に文字を追加することができるので、Aの前後はBに完全に一致することができるからである.ただし、Aが中間に文字を追加できない場合、A文字列はB文字列と完全に整列できず、A文字列はB文字列と完全に整列しなければならないため、A文字列とB文字列の差が最も小さい場合、A文字列とB文字列の差が最も大きい.
  • 上記の方法
  • を使用して、B文字列のうちA文字列との差が最も小さい位置を検索し、その値を出力する.