字符串按字符数排序

时间:2011-01-13 08:40:21

标签: algorithm

示例数据: 输入:“abcdacdc” 输出:“cadb” 在这里,我们必须按字符数排序字符串。 如果字符的计数相同。保持原来的顺序 输入字符串中的字符。

我的方法:我使用了26的数组来维护所有字符的出现并对其进行排序然后打印出来。但是这样做的话,如果两个字符具有相同的计数,我就无法保持顺序。

请建议任何改进或任何其他算法。

1 个答案:

答案 0 :(得分:2)

例如在c#中使用哪种语言,您可以简单地执行以下操作:

var strstr = "abcdacdc";
var sortedString = new string(strstr
                              .OrderByDescending(x => strstr.Count(p=>p==x))
                              .Distinct().ToArray());

算法很明显(在for循环中你也可以这样做)。

编辑:首先我们按照计数对字符串的所有字符进行排序,之后我们将使用没有重复项目的字符(Distinct方法)。

    private struct CharCount
    {
        public int count;
        public char ch;
    }

    List<CharCount> sortedChars = new List<CharCount>();
   for(int i=0;i<strstr.Length;i++)
   {
       if (sortedChars.FindIndex(x => x.ch == strstr[i]) < 0)
       {
         int charcount = GetCharCount(strstr, strstr[i]);
         sortedChars.Add(new CharCount {count = charcount, ch = strstr[i]});
       }
   }

   string sortedstr2 = new string(sortedChars.OrderByDescending(x => x.count).Select(x=>x.ch).ToArray());

你可以像你的方式一样实现GetCharCount方法,26个字符的数组和......,所以首先用于循环的上述算法是O(n ^ 2),最后一个段落(排序)是O(n log( n))总共为O(n ^ 2)。您可以根据需要(按您的特定语言)更改最后一段。