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

我必须实现一个函数,它接受一个字符串作为输入,并从该字符串中找到非重复的字符。

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

Linq方法:

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

它会完成这项工作

 string removedupes(string s) { string newString = string.Empty; List found = new List(); foreach(char c in s) { if(found.Contains(c)) continue; newString+=c.ToString(); found.Add(c); } return newString; } 

我应该注意到这是犯罪效率低下的。

我想我在第一次修订时很神志不清。

对于任意长度的字节大小的字符串(不适用于宽字符或其他编码),我会使用一个查找表,每个字符一位(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#不好,所以我不知道使用位域而不是字节数组的正确方法。

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

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

  • 循环遍历字符串,检查每个字符
  • 检查你以前是否看过这个角色
    • 如果有,请将其从字符串中删除
    • 如果你还没有,请注意你现在已经看过那个角色了
  void removeDuplicate() { string value1 = RemoveDuplicateChars("Devarajan"); } static string RemoveDuplicateChars(string key) { string table = ""; string result = ""; foreach (char value in key) { if (table.IndexOf(value) == -1) { table += value; result += value; } } return result; } 

我在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 

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

  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; } 

你可以使用HashSet:

  static void Main() { string textWithDuplicates = "aaabbcccggg"; Console.WriteLine(textWithDuplicates.Count()); var letters = new HashSet(textWithDuplicates); Console.WriteLine(letters.Count()); foreach (char c in letters) Console.Write(c); } 

char * remove_duplicates(char * str){char * str1,* str2;

 if(!str) return str; str1 = str2 = str; while(*str2) { if(strchr(str, *str2) 

}

 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 

希望这可以帮助

 String str="AABBCANCDE"; String newStr=""; for( int i=0; i 

//删除上下两个重复项

 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; } 
  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()); } } 
 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); 

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

所以我会这样做:

 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; } 

不确定它是多么的最佳:

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

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

  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(); 

C#中第一个答案的修订版如下

string oldstr =“abacab”;

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

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