📌  相关文章
📜  从给定字符串中删除重复项的 C# 程序(1)

📅  最后修改于: 2023-12-03 15:06:37.787000             🧑  作者: Mango

从给定字符串中删除重复项的 C# 程序

本篇文档将介绍如何使用C#语言编写一个可以删除一个字符串中重复项的程序。

我们先来看看一个简单的方法。

public static string RemoveDuplicateChars(string input)
{
    return new string(input.Distinct().ToArray());
}

这个方法使用了Linq的Distinct()方法来获取一个不含重复字符的字符序列。

现在我们来详细讲解一下程序的实现。

方法1:使用HashSet
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中,最终返回一个不包含重复项的字符串。

方法2:使用Dictionary
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中的内容,它就是不包含重复项的字符串。

方法3:使用数组
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和数组来删除输入字符串中的重复项。

你可以根据你的需要选择任意一种方法来实现。