トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

No.224 文字列変更(easy)

■■■問題■■■

長さnの2つの文字列S, Tが与えられます。文字列を構成する各文字は、'a'〜'z'です。
今、Sに以下の操作を順次実施してTに変換したいです。

そのような一連の操作のうち、操作回数の最小となるものについて、
その最小値を出力するプログラムを書いて下さい。

(操作)
Sの中から文字S[i]を1個選んで、その文字を'a'〜'z'のいずれかの好きな文字に変更します

■■■入力■■■

n
S
T

1行目に文字列S, Tの長さを表す整数nで与えられます。
続く2行目、3行目には、文字列S, Tがそれぞれ与えられます。

1 <= n <= 1000
S, Tは、'a'〜'z'から構成される文字列です 

■■■出力■■■

答えを1行に出力してください。 


C#のソース

using System;
using System.Collections.Generic;

class Program
{
    static string InputPattern = "Input1";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("7");
            WillReturn.Add("aaabbcc");
            WillReturn.Add("aabbccc");
            //2
            //まず、3文字目を'a' -> 'b'と変更すると、
            //aaabbcc -> aabbbcc
            //次に、6文字目を'b' -> 'c'と変更すると、
            //aabbbcc -> aabbccc
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("5");
            WillReturn.Add("abcde");
            WillReturn.Add("abcde");
            //0
            //操作を行う必要がないため、0を出力します。
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("8");
            WillReturn.Add("hidamari");
            WillReturn.Add("yunocchi");
            //7
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        string S = InputList[1];
        string T = InputList[2];

        int Cost = 0;
        for (int I = 0; I <= S.Length - 1; I++) {
            if (S[I] != T[I]) Cost++;
        }
        Console.WriteLine(Cost);
    }
}


解説

ナイーブに1文字ずつ比較してます。