AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC097-C K-th Substring
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("aba");
WillReturn.Add("4");
//b
}
else if (InputPattern == "Input2") {
WillReturn.Add("atcoderandatcodeer");
WillReturn.Add("5");
//andat
}
else if (InputPattern == "Input3") {
WillReturn.Add("z");
WillReturn.Add("1");
//z
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
string S = InputList[0];
int K = int.Parse(InputList[1]);
var SubStrSet = new HashSet<string>();
int UB = S.Length - 1;
for (int I = 0; I <= UB; I++) {
for (int J = I; J <= UB; J++) {
int StrLen = J - I + 1;
if (K < StrLen) break;
SubStrSet.Add(S.Substring(I, StrLen));
}
}
var Query = SubStrSet.OrderBy(pX => pX).ElementAt(K - 1);
Console.WriteLine(Query);
}
}
解説
辞書順でK番目に小さいものを出力するので、
文字数がKより大きい文字を飛ばしつつ、
候補になる部分文字列を列挙してます。