我正在尝试在codeeval.com中找到一个挑战的解决方案 https://www.codeeval.com/open_challenges/125/
我的代码:
Dim seq As String = "0"
Dim tmp As String
For i As Integer = 1 To 31
tmp = seq
tmp = tmp.Replace("2", "3")
tmp = tmp.Replace("1", "2")
tmp = tmp.Replace("0", "1")
tmp = tmp.Replace("3", "0")
seq &= tmp
Next
Console.WriteLine(seq)
在20次循环后,visual studio达到1.5 gb ram使用,并且在25次循环后不起作用。你能告诉我如何解决这个问题吗?
编辑:
最终字符串的长度必须为3000000000长。这就是为什么我写了一个循环。在10个循环中,字符串长度变为1024.我应该编写一个循环31循环,其长度为4294967296(2 ^ 31)。
我的新代码:
Dim seq As StringBuilder = New StringBuilder()
Dim tmp As StringBuilder = New StringBuilder()
seq.Append("0")
For i As Integer = 1 To 30
tmp.Append(seq)
seq.Replace("2", "3")
seq.Replace("1", "2")
seq.Replace("0", "1")
seq.Replace("3", "0")
tmp.Append(seq)
seq.Clear()
seq.Append(tmp)
Next
答案 0 :(得分:0)
首先:正如您所做的那样,使用StringBuilder。
您可以通过索引访问字符串中的任何字符,并对其进行更改。所以你必须遍历你的新字符串,检查0,1,2的每个单个字符并根据需要进行更改(这样你就可以避免4个替换调用 - 每个都需要时间)。
第二:正如What is the maximum possible length of a .NET string?所述,长串会遇到麻烦。因此,请考虑将其拆分为多个阵列(每个阵列的大小可能为1百万。
祝你好运。