📅  最后修改于: 2023-12-03 15:06:37.787000             🧑  作者: Mango
本篇文档将介绍如何使用C#语言编写一个可以删除一个字符串中重复项的程序。
我们先来看看一个简单的方法。
public static string RemoveDuplicateChars(string input)
{
return new string(input.Distinct().ToArray());
}
这个方法使用了Linq的Distinct()方法来获取一个不含重复字符的字符序列。
现在我们来详细讲解一下程序的实现。
public static string RemoveDuplicateChars(string input)
{
HashSet<char> set = new HashSet<char>();
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if (set.Add(c))
{
sb.Append(c);
}
}
return sb.ToString();
}
这个方法使用了HashSet(哈希集合),它是一种集合类型,只能包含不同的元素。
HashSet的Add()方法可以用来向集合中添加元素,如果元素已经存在于集合中,Add()方法会返回false。
所以我们可以通过在遍历每一个字符之前向HashSet集合中添加这个字符,来判断这个字符是否在原字符串中存在。如果它不存在,就将它添加到sb中,最终返回一个不包含重复项的字符串。
public static string RemoveDuplicateChars(string input)
{
Dictionary<char, int> dict = new Dictionary<char, int>();
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if (!dict.ContainsKey(c))
{
sb.Append(c);
dict.Add(c, 0);
}
}
return sb.ToString();
}
这个方法使用了Dictionary(字典),它包含了一个键和一个值,通过键来访问值。
在我们的程序中,使用了char作为键,int作为值,表示出现的次数。
我们遍历每一个字符,如果它不在字典中,就将它添加到sb中,并且使用Add()方法将它添加到字典中作为一个新的键值对。
如果它已经在字典中了,就跳过这个字符继续遍历。
最后返回sb中的内容,它就是不包含重复项的字符串。
public static string RemoveDuplicateChars(string input)
{
bool[] flag = new bool[65536];
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if (!flag[c])
{
sb.Append(c);
flag[c] = true;
}
}
return sb.ToString();
}
这个方法使用了一个bool类型的数组,用来标记每一个字符是否出现过。
我们遍历每一个字符,如果它没有被标记,就将它添加到sb中,并且将flag数组中对应的位置标记为true。
如果它已经被标记了,就跳过这个字符继续遍历。
最后返回sb中的内容,它就是不包含重复项的字符串。
现在我们已经通过三种方法,分别使用了HashSet、Dictionary和数组来删除输入字符串中的重复项。
你可以根据你的需要选择任意一种方法来实现。