AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC349-C Airport Code
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("narita");
WillReturn.Add("NRT");
//Yes
}
else if (InputPattern == "Input2") {
WillReturn.Add("losangeles");
WillReturn.Add("LAX");
//Yes
}
else if (InputPattern == "Input3") {
WillReturn.Add("snuke");
WillReturn.Add("RNG");
//No
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
string S = InputList[0];
string T = InputList[1];
S = S.ToUpper();
T = T.ToUpper();
var sb = new System.Text.StringBuilder();
if (T.EndsWith("X")) {
sb.Append('^');
sb.AppendFormat(@"[^{0}]*{0}", T[0]);
sb.AppendFormat(@"[^{0}]*{0}", T[1]);
}
else {
sb.Append('^');
sb.AppendFormat(@"[^{0}]*{0}", T[0]);
sb.AppendFormat(@"[^{0}]*{0}", T[1]);
sb.AppendFormat(@"[^{0}]*{0}", T[2]);
}
string MatchPattern = sb.ToString();
if (Regex.IsMatch(S, MatchPattern)) {
Console.WriteLine("Yes");
}
else {
Console.WriteLine("No");
}
}
}
解説
オライリーの詳説正規表現の241ページ
「先頭アンカーによる最適化」で
アンマッチな時のTLEを防いでます。