查找给定字符串中第一个不同的字符

时间:2017-10-06 11:48:26

标签: c#

在C#中,如何创建一个给定字符串的函数,返回第一个不同的字符?

示例在:abcdabc 示例输出:d

我可以使用.Distinct()来实现这一目标吗?

3 个答案:

答案 0 :(得分:2)

你也可以使用LINQ。例如,此LINQ查询将返回e。

var str = "abcdeabcd";

var item = (from a in str group a by a 
 into grouped select new { character = grouped.Key, Count = grouped.Count() 
}).Where(t=>t.Count == 1)
.FirstOrDefault()?.character;

  Console.WriteLine(item);    

或使用带有扩展方法的lambda表达式的LINQ    (称为方法语法),

var find = str.GroupBy(t => t)
.Select(y => new { character = y.Key, Count = y.Count() })
.Where(a => a.Count < 2).FirstOrDefault()?.character;

  Console.WriteLine(find);    

  Console.ReadLine();

答案 1 :(得分:0)

var input = "abcdabc";

var firstDistinct = input.Select((ch, index) => new {ch, index})
    .GroupBy(z => z.ch)
    .Where(z => z.Count() == 1)
    .OrderBy(z => z.Index())
    .Select(z => z.Key)
    .FirstOrDefault();

上方找到一次显示的字符(Count() == 1)并首先显示(OrderBy(z => z.Index()))。

技术您不需要OrderBy,因为内存LINQ提供商的GroupBy运营商会按顺序保留结果默认情况下。但这是一个实施细节,而不是合同义务。如果您乐意利用这个实施细节(正如所有其他答案一样),那么请考虑:

var firstDistinct = input.GroupBy(z => z)
    .Where(z => z.Count() == 1)
    .Select(z => z.Key)
    .FirstOrDefault();

答案 2 :(得分:-1)

尝试这样做:

var str="abcdabcd";

for (int i = 0; i < str.Length; i++)
{
   String ch = str[i].ToString();

   for (int j = 0; j < str.Length; j++)
   {
      if (ch == str[j].ToString())
      {
         break;
      }
      else
      {
         Response.Write("First Non repeating character : " + ch.ToString());
         return;
      }
   }
}
相关问题