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

AGC-006-A Prefix and Suffix

■■■問題■■■

すぬけ君は次の条件を満たす文字列に興味があります。
●長さN以上である
●先頭N文字が文字列sに一致する
●末尾N文字が文字列tに一致する

条件を満たす文字列のうち、最も短いものの長さを求めてください。

■■■入力■■■

N
s
t

●1 <= N <= 100
●s,tは長さNである
●s,tは英小文字のみからなる

■■■出力■■■

条件を満たす文字列のうち、最も短いものの長さを出力せよ。


C#のソース

using System;
using System.Collections.Generic;

class Program
{
    static string InputPattern = "InputX";

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

        if (InputPattern == "Input1") {
            WillReturn.Add("3");
            WillReturn.Add("abc");
            WillReturn.Add("cde");
            //5
            //最も短い文字列はabcdeです
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("1");
            WillReturn.Add("a");
            WillReturn.Add("z");
            //2
            //最も短い文字列はazです
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("4");
            WillReturn.Add("expr");
            WillReturn.Add("expr");
            //4
            //最も短い文字列はexprです
        }
        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];

        //文字列sの添字Iから文字列tで上書き
        for (int I = 0; I <= s.Length - 1; I++) {
            string wkStr = s.Remove(I);
            wkStr += t;

            if (wkStr.StartsWith(s) == false) continue;
            if (wkStr.EndsWith(t) == false) continue;
            Console.WriteLine(wkStr.Length);
            return;
        }

        //文字列sの後に文字列tを連結
        Console.WriteLine((s + t).Length);
    }
}


解説

短い文字列の候補から順に調べてます。