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クラスで対応してます。