段落を入力してアナグラムチェッカーを試して出力するとクリアですが、メモリ制限が指定された制限を超えています
これは私が試したコードです
using System;
class Program
{
static void Main(string[] args)
{
string[] arr = (Punct(Console.ReadLine()).ToLower()).Split(' ');
string a = string.Empty;
System.Collections.Generic.Dictionary<string, string> dn = new System.Collections.Generic.Dictionary<string, string>(); // *2
foreach (string s in arr)
{
string st = sort(s);
if (dn.ContainsKey(st))
{
if (dn[st] != s)
{
if (a.Contains(dn[st]))
a = a.Replace(dn[st], dn[st] + " " + s); // *1
else
a = a + dn[st] + " " + s + "\n";
dn[st] = s;
}
}
else
dn.Add(st, s);
}
Console.Write(a);
}
public static string sort(string s)
{
char[] chars = s.ToCharArray();
Array.Sort(chars);
return new string(chars);
}
public static string Punct(string s)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (char c in s)
{
if (!char.IsPunctuation(c))
sb.Append(c);
}
return sb.ToString();
}
}
プロファイラーで確認すると、文字列関数は多くのメモリと他の辞書も必要とするため、上記のコードを最小のメモリに最適化するにはどうすればよいですか、または使用しているコードや宣言は不要ですか?
入力:
世界の一部では、夏の間、24 時間近く日光があります。ダンは自分がリーダーであることを示すために頭にストラップを巻いており、彼の前にどんな種類の罠があるのか 疑問に思っていました。
出力:
パーツ ストラップ トラップ
だんと