AtCoderの企業コンテスト    前の企業コンテストコンテストの問題へ

ZONeエナジー D 宇宙人からのメッセージ


問題へのリンク


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("ozRnonnoe");
            //zone
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("hellospaceRhellospace");
            //
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();

        string S = InputList[0];

        var InsLinkedList = new LinkedList<char>();

        bool IsRev = false;
        foreach (char EachChar in S) {
            if (EachChar == 'R') {
                IsRev = (!IsRev);
                continue;
            }
            if (IsRev) {
                InsLinkedList.AddFirst(EachChar);
            }
            else {
                InsLinkedList.AddLast(EachChar);
            }
        }
        var sb1 = new System.Text.StringBuilder();

        foreach (char EachChar in InsLinkedList) {
            sb1.Append(EachChar);
        }
        string sbStr1 = sb1.ToString();

        if (IsRev) {
            sbStr1 = new string(sbStr1.ToCharArray().Reverse().ToArray());
        }

        var sb2 = new System.Text.StringBuilder();
        foreach (char EachChar in sbStr1) {
            int CurrUB = sb2.Length - 1;
            if (sb2.Length >= 1 && sb2[CurrUB] == EachChar) {
                sb2.Length--;
            }
            else {
                sb2.Append(EachChar);
            }
        }
        Console.WriteLine(sb2.ToString());
    }
}


解説

反転の対応として、
LinkedListに前後からchar型をAddするようにしてます。

連続文字の削除は、
StringBuilderクラスで対応してます。