通过输入段落尝试 Anagram 检查器,输出清晰,但内存限制超过指定
这是我尝试过的代码
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 小时的阳光。丹的头上戴着一条带子,以表明自己是领导者,他想知道他面前摆着什么样的陷阱。
输出:
零件带陷阱
丹和