如何删除字符串中的重复字符?

时间:2009-02-26 01:43:48

标签: c#

我必须实现一个函数,该函数将字符串作为输入并从该字符串中查找非重复字符。

所以一个例子是如果我传递字符串str =“DHCD”它将返回“DHC” 或str2 =“KLKLHHMO”它将返回“KLHMO”

21 个答案:

答案 0 :(得分:31)

Linq方法:

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

答案 1 :(得分:8)

它将完成这项工作

string removedupes(string s)
{
    string newString = string.Empty;
    List<char> found = new List<char>();
    foreach(char c in s)
    {
       if(found.Contains(c))
          continue;

       newString+=c.ToString();
       found.Add(c);
    }
    return newString;
}

我应该注意到这是非常低效的。

我认为我在第一次修订时神志不清。

答案 2 :(得分:6)

对于任意长度的字节大小的字符串(不适用于宽字符或其他编码),我会使用查找表,每个字符一位(256位表为32位)。循环遍历你的字符串,只输出没有打开其位的字符,然后打开该字符的位。

string removedupes(string s)
{
    string t;
    byte[] found = new byte[256];
    foreach(char c in s)
    {
        if(!found[c]) {
            t.Append(c);
            found[c]=1;
        }
    }
    return t;
}

我对C#不好,所以我不知道使用位域而不是字节数组的正确方法。

如果你知道你的字符串非常短,那么其他方法可以提供更好的内存使用和/或速度。

答案 3 :(得分:4)

    void removeDuplicate()
    {
      string value1 = RemoveDuplicateChars("Devarajan");
    }

     static string RemoveDuplicateChars(string key)
    {
        string result = "";          
        foreach (char value in key)
            if (result.IndexOf(value) == -1)                   
                result += value;
        return result;
    }

答案 4 :(得分:3)

这对我来说听起来像是家庭作业,所以我只是要在高层次上进行描述。

  • 遍历字符串,检查每个字符
  • 检查您之前是否看过该角色
    • 如果有,请将其从字符串
    • 中删除
    • 如果你还没有,请注意你现在已经看到了那个角色

答案 5 :(得分:1)

我在java语言中的答案 在这里发帖,以便你可以在Java语言中得到一个想法。算法将保持不变。

public String removeDup(String s)
  {
    if(s==null) return null;
    int l = s.length();
    //if length is less than 2 return string
    if(l<2)return s;
    char arr[] = s.toCharArray();

    for(int i=0;i<l;i++)
    {
      int j =i+1; //index to check with ith index
      int t = i+1; //index of first repetative char.

      while(j<l)
      {
        if(arr[j]==arr[i])
        {
          j++;

        }
        else
        {
          arr[t]=arr[j];
          t++;
          j++;
        }

      }
      l=t;
    }

    return new String(arr,0,l);
  }

答案 6 :(得分:1)

//这是在C#中,为简洁而省略了验证 //用于从给定字符串中删除重复字符的原始解决方案

    public static char[] RemoveDup(string s)
    {
        char[] c = new char[s.Length];
        int unique = 0;
        c[unique] = s[0];  // Assume: First char is trivial
        for (int i = 1; i < s.Length; i++)
        {
            if (s[i-1] != s[i]
        c[++unique] = s[i];
        }
        return c;
    }

答案 7 :(得分:1)

你可以使用HashSet:

 static void Main()
    {
        string textWithDuplicates = "aaabbcccggg";

        Console.WriteLine(textWithDuplicates.Count());  
        var letters = new HashSet<char>(textWithDuplicates);
        Console.WriteLine(letters.Count());

        foreach (char c in letters) Console.Write(c);   
    }

答案 8 :(得分:0)

//删除两个上下重复项

public static string RemoveDuplicates(string key)
    {
        string Result = string.Empty;
        foreach (char a in key)
        {
            if (Result.Contains(a.ToString().ToUpper()) || Result.Contains(a.ToString().ToLower()))
                continue;
            Result += a.ToString();
        }
        return Result;
    }

答案 9 :(得分:0)

这对我有用

private string removeDuplicateChars(String value)
{
    return new string(value.Distinct().ToArray());
}

答案 10 :(得分:0)

  

namespace演示{类程序{

  static void Main(string[] args) {
     string myStr = "kkllmmnnouo";
     Console.WriteLine("Initial String: "+myStr);
    // var unique = new HashSet<char>(myStr);
     HashSet<char> unique = new HashSet<char>(myStr);
     Console.Write("New String after removing duplicates: ");

     foreach (char c in unique) 
        Console.Write(c);   
  }    } }

答案 11 :(得分:0)

以下是从字符串中删除重复字符的代码

        var input = "SaaSingeshe";
        var filteredString = new StringBuilder();
        foreach(char c in input)
        {
            if(filteredString.ToString().IndexOf(c)==-1)
            {
                filteredString.Append(c);
            }
        }
        Console.WriteLine(filteredString);
        Console.ReadKey();

答案 12 :(得分:0)

不确定它的最佳状态:

public static string RemoveDuplicates(string input)
{
    var output = string.Join("", input.ToHashSet());
    return output;
}

答案 13 :(得分:0)

我喜欢Quintin Robinson的回答,只是应该有一些改进,例如删除List,因为在这种情况下它不是必需的。 另外,在我看来,大写字母(&#34; K&#34;)和小写字母(&#34; k&#34;)是相同的,所以它们应该算作一个。

所以我会这样做:

private static string RemoveDuplicates(string textEntered)
    {

        string newString = string.Empty;

        foreach (var c in textEntered)
        {
            if (newString.Contains(char.ToLower(c)) || newString.Contains(char.ToUpper(c)))
            {
                continue;
            }
            newString += c.ToString();
        }
        return newString;
    }

答案 14 :(得分:0)

Console.WriteLine("Enter String");

string str = Console.ReadLine();

string result = "";
result += str[0]; // first character of string

for (int i = 1; i < str.Length; i++)
{
    if (str[i - 1] != str[i])
        result += str[i];
}

Console.WriteLine(result);

答案 15 :(得分:0)

 class Program
    {
        static void Main(string[] args)
        {
            bool[] doesExists = new bool[256];
            String st = Console.ReadLine();
            StringBuilder sb = new StringBuilder();
            foreach (char ch in st)
            {
                if (!doesExists[ch])
                {
                    sb.Append(ch);
                    doesExists[ch] = true;
                }
            }
            Console.WriteLine(sb.ToString());
        }
    }

答案 16 :(得分:0)

答案 17 :(得分:0)

String str="AABBCANCDE";  
String newStr=""; 
for( int i=0; i<str.length(); i++)
{
 if(!newStr.contains(str.charAt(i)+""))
 newStr= newStr+str.charAt(i);
 }
 System.out.println(newStr);

答案 18 :(得分:0)

char* removeDups(const char* str)
{
 char* new_str = (char*)malloc(256*sizeof(char));
 int i,j,current_pos = 0,len_of_new_str;
 new_str[0]='\0';

 for(i=0;i<strlen(str);i++)
{
 len_of_new_str = strlen(new_str);
for(j=0;j<len_of_new_str && new_str[j]!=str[i];j++)
   ;
  if(j==len_of_new_str)
   {
     new_str[len_of_new_str] = str[i];
     new_str[len_of_new_str+1] = '\0';
   }
}
  return new_str;
}

希望这有帮助

答案 19 :(得分:-1)

var input1 = Console.ReadLine().ToLower().ToCharArray();
var input2 = input1;
var WithoutDuplicate = input1.Union(input2);

答案 20 :(得分:-1)

C#中第一个答案的修订版本在

之下

string oldstr =“abacab”;

string newstr = new string(oldstr.Distinct()。ToArray());