📜  c# + 字符串中最长的条纹 - C# 代码示例

📅  最后修改于: 2022-03-11 14:48:47.851000             🧑  作者: Mango

代码示例1
//Longest streak of chars in a string...should return 4(d's)

public static void Main(string[] args)
        {
            Console.WriteLine(Streak("aaabbCCC88ddddacC8"));
        }
public static int Streak(string s)
{
    int max = 0;
            int count = 0;

            for (int i = 1; i < s.Length; i++)
            {
                char currentLetter  = s[i];
                char previousLetter = s[i - 1];

                if (currentLetter == previousLetter) count++;
                if (count > max) max = count +1;
                if (currentLetter != previousLetter) count = 0;
            }

            return max;
}
---------------------------------------------------Option 1
public static int Streak(string s)
{
    int max = 0;

            for (int i = 0; i < s.Length; i++)
            {
                int count = 0;
                for (int j = i; j < s.Length; j++)
                {
                    if (s[i] == s[j]) count++;
                    if (count > max) max = count;
                    if (s[i] != s[j]) break;
                }
            }
            return max;
}
-----------------------------------------------------option 2

  public static string Streak(string s)
{
  Dictionary dict = new Dictionary();

  for (int i = 1; i < s.Length; i++)
  {
    //isolate char positions
    char currentLetter  = s[i];
    char previousLetter = s[i - 1];

    //Only if positions have matching char
    if (currentLetter == previousLetter)
    {
      //Increment existing(K,V) value by 1
      if (dict.ContainsKey(currentLetter))
        dict[currentLetter] = dict[currentLetter] + 1;

      //1st time that 2 positions match
      else if (!dict.ContainsKey(currentLetter))                   
      {
        dict.Add(currentLetter, 2);
      }
    }
  }
  //Sort High-Low based on (k,v) int value 
  var ordered = dict.OrderByDescending(dict => dict.Value)
    .ToDictionary(dict => dict.Key, dict => dict.Value);

  //Alternately --Take(1) highest count -or- var singleEntryDict = ordered.First();
  var result = ordered.Take(3).ToDictionary(d => d.Key, d => d.Value);

  var resultToString = string.Join(Environment.NewLine, result);

  return resultToString;
}
-----------------------------------------------------option 3