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

No.69 文字を自由に並び替え

■■■問題■■■

同じ長さの文字列Aと文字列Bが与えられる。
文字列Aの順番を自由に並び替えることができる。
文字列Aと文字列Bを同じにできるか判定せよ。

■■■入力■■■

A
B

文字列Aと文字列Bは1文字以上10文字以内の文字列。
文字列Aの長さと文字列Bの長さはかならず同じ。
文字はすべて小文字のアルファベットaからzで構成される。

■■■出力■■■

可能ならYES、不可能ならNOを出力せよ。
改行を忘れずに。


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "Input1";

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

        if (InputPattern == "Input1") {
            WillReturn.Add("dog");
            WillReturn.Add("god");
            //YES
            //dogのdとgを入れ替えればgodになる。
            //よって、YESが答え。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("cat");
            WillReturn.Add("tea");
            //NO
            //catをどのように並び替えてもteaにはならない。
            //よって、NOが答え。
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("silence");
            WillReturn.Add("license");
            //YES
        }
        else if (InputPattern == "Input4") {
            WillReturn.Add("yukicoder");
            WillReturn.Add("yukicoder");
            //YES
            //最初から一致している場合もあります
        }
        else if (InputPattern == "Input5") {
            WillReturn.Add("hurjztkyua");
            WillReturn.Add("urjukzthua");
            //NO
            //意味不明な文字列もでます
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        string A = InputList[0];
        string B = InputList[1];
        IEnumerable<char> wkEnum1 = A.OrderBy(X => X);
        IEnumerable<char> wkEnum2 = B.OrderBy(X => X);
        Console.WriteLine(wkEnum1.SequenceEqual(wkEnum2) ? "YES" : "NO");
    }
}


解説

ソートした列挙同士をSequenceEqualメソッドで比較してます。