トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
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);
}
}
解説
短い文字列の候補から順に調べてます。