要从字符串中获取唯一字符?

时间:2012-09-12 12:50:06

标签: c# string

我想从字符串中提取唯一字符。例如: - 'AAABBBBBCCCCFFFFGGGGGDDDDJJJJJJ'将返回'ABCFGDJ'

我试过下面的代码,但现在我想优化它。 如果有人知道,请建议。

static string extract(string original)
 {
        List<char> characters = new List<char>();   
        string unique = string.Empty; 
        foreach (char letter in original.ToCharArray())    
         {  
             if (!characters.Contains(letter))   
             {      
                  characters.Add(letter);   
              }            
          }  
        foreach (char letter in characters)
        {  
              unique += letter;    
         }     
     return unique;
 } 

5 个答案:

答案 0 :(得分:13)

我不知道这是否更快,但肯定更短

string s = "AAABBBBBCCCCFFFFGGGGGDDDDJJJJJJ";
var newstr = String.Join("", s.Distinct());

答案 1 :(得分:5)

另一种LINQ方法,但没有使用string.Join

var result = new string(original.Distinct().ToArray());

老实说,我不知道字符串创建的哪种方法会更快。这可能取决于string.Join在追加StringBuilder之前是否最终在内部将每个元素转换为字符串,或者是否为某些众所周知的类型提供自定义支持以避免这种情况。

答案 2 :(得分:2)

怎么样

var result = string.Join("", "AAABBBBBCCCCFFFFGGGGGDDDDJJJJJJ".Distinct());

确保包含System.Linq命名空间。

答案 3 :(得分:2)

试试这个

string str = "AAABBBBBCCCCFFFFGGGGGDDDDJJJJJJ"; 
string answer = new String(str.Distinct().ToArray()); 

我希望这会有所帮助。

答案 4 :(得分:2)

如果“AAABBBAAA”应返回“ABA”,则以下操作。虽然不是很快。

List<char> no_repeats = new List<char>();
no_repeats.Add(s[0]);
for (int i = 1; i < s.Length; i++)
{
    if (s[i] != no_repeats.Last()) no_repeats.Add(s[i]);
}
string result = string.Join("", no_repeats);