我有一个字符串:
string input = "aaaabbcccghbcccciippppkkllk"
输出应为:
abcghbcipklk
注意:必须使用循环或递归。等等
我正在研究不同代码的效率,方法是演示几个问题,这只是我自己给出的一种解决方案,我只是想知道是否有比此更好更好的代码,所以我可以比较使用所有这些代码。
string input = "aaaabbcccghbcccciippppkkllk";
int j=0;
for (int i=0; i<input.Length - 1; i++) {
for(j=i+1; j<input.Length && input[i] == input[j]; j++);
input = input.Substring(0, i+1) + input.Substring(j);
}
Console.WriteLine(input);
这也是我在答案部分中添加的解决方案,可以通过检查答案的时间戳在下面进行验证。
答案 0 :(得分:2)
根据我的理解,您只想消除重复的仅在连续的序列中。您可以使用以下方法实现它
使用List<string>
var nonDuplicates = new List<char>();
foreach (var element in str.ToCharArray())
{
if(nonDuplicates.Count == 0 || nonDuplicates.Last() != element)
nonDuplicates.Add(element);
}
var result = new string(nonDuplicates.ToArray());
更新
参考的评论,我更新了答案,并提供了另外两个解决方案,并对它们进行了基准测试。结果如下所示。
使用字符串追加
var str = "aaaabbcccghbcccciippppkkllk";
var strResult = string.Empty;
foreach (var element in str.ToCharArray())
{
if (strResult.Length == 0 || strResult[strResult.Length - 1] != element)
strResult = $"{strResult}{element}";
}
使用StringBuilder
var str = "aaaabbcccghbcccciippppkkllk";
var strResult = new StringBuilder();
foreach (var element in str.ToCharArray())
{
if (strResult.Length == 0 || strResult[strResult.Length - 1] != element)
strResult.Append(element);
}
var result = strResult.ToString();
基准测试结果
Method | Mean | Error | StdDev | Median |
------------------- |-----------:|----------:|-----------:|-----------:|
UsingList | 809.7 ns | 11.975 ns | 11.202 ns | 806.5 ns |
UsingStringAppend | 1,738.0 ns | 39.269 ns | 109.467 ns | 1,697.2 ns |
UsingStringBuilder | 201.6 ns | 1.960 ns | 1.834 ns | 201.1 ns |
从结果中可以看出,与List相比,StrinbBuilder方法要快得多。字符串追加方法最慢。
输入
aaaabbcccghbcccciippppkkllk
输出
abcghbcipklk
答案 1 :(得分:2)
我认为这是测试任务的结果,在这些任务中,您只能使用任何.NET“方便”功能来表达自己的想法。
好的,这是使用“简单”语言的方法:
string input = "aaaabbcccghbcccciippppkkllk"
var result = "" + input[0];
for(var i = 1; i < input.Length; i++)
{
if(input[i] != result[result.Length-1])
{
result += input[i];
}
}
答案 2 :(得分:1)
public static string RemoveDuplicates(string input)
{
return new string(input.Distinct().ToArray());
}
答案 3 :(得分:0)
string str = "abbxxcccxbaac";
string nstr = str[0].ToString();
for(int j = 0; j < str.Length - 1; j++)
{
if(!str[j].Equals(str[j + 1]))
{
nstr = nstr + str[j + 1];
}
}
它将从字符串中删除连续的字符。 nstr 是输出。
答案 4 :(得分:-1)
这是我提出的解决方案!
string input = "aaaabbcccghbcccciippppkkllk";
int j=0;
for (int i=0; i<input.Length - 1; i++) {
for(j=i+1; j<input.Length && input[i] == input[j]; j++);
input = input.Substring(0, i+1) + input.Substring(j);
}
Console.WriteLine(input);