AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC110-C String Transformation
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("azzel");
WillReturn.Add("apple");
//Yes
}
else if (InputPattern == "Input2") {
WillReturn.Add("chokudai");
WillReturn.Add("redcoder");
//No
}
else if (InputPattern == "Input3") {
WillReturn.Add("abcdefghijklmnopqrstuvwxyz");
WillReturn.Add("ibyhqfrekavclxjstdwgpzmonu");
//Yes
}
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];
var SToIndSetDict = new Dictionary<char, HashSet<int>>();
var TFromIndSetDict = new Dictionary<char, HashSet<int>>();
for (int I = 0; I <= S.Length - 1; I++) {
char CharS = S[I];
char CharT = T[I];
if (SToIndSetDict.ContainsKey(CharS) == false) {
SToIndSetDict[CharS] = new HashSet<int>();
}
if (TFromIndSetDict.ContainsKey(CharT) == false) {
TFromIndSetDict[CharT] = new HashSet<int>();
}
SToIndSetDict[CharS].Add(CharT);
TFromIndSetDict[CharT].Add(CharS);
}
bool IsOK = true;
foreach (var EachPair in SToIndSetDict) {
if (EachPair.Value.Count >= 2) {
IsOK = false;
}
}
foreach (var EachPair in TFromIndSetDict) {
if (EachPair.Value.Count >= 2) {
IsOK = false;
}
}
Console.WriteLine(IsOK ? "Yes" : "No");
}
}
解説
スワップしかできないので、
SとTの各文字が1対1になっている必要があって
1対多の文字があると変換できないです。
なので、1対多がないかを調べてます。