private static void Find(string input, int seq) { var chars = input.Distinct().ToList(); List<int> count = new List<int>(); for (int i = 0; i < chars.Count(); i++) { count.Add(input.Split(chars[i]).Count() - 1); } count.Sort(); for (int i = 0; i < chars.Count(); i++) { if (input.Split(chars[i]).Count() - 1 == count[count.Count() - seq]) { Console.WriteLine(chars[i]); } } }
这是一道面试题:《找出一个字符串中出现次数第二多的字符》
以上是我整理的当时笔试时写的代码,面试官说我写的太多!问我怎么改进我没有答上来。
我今天想了一下午,还是失败了。我最少也需要这些代码。
你们有什么方法吗?请给出最短的代码。最好一个for循环就解决问题。或者更短!
你们有什么好的思路????
string SandKing = "AAAAAAAAAAAAAABCDEFERIYWEUIRYFUI#@Y&*TSDGFSDYWETYFUSDFSFWARWE"; char[] hj= SandKing.ToCharArray(); var query = from s in hj group s by s into sg orderby sg.Count() descending select new { ClassID = sg.Key, Count = sg.Count() }; foreach (var item in query.Skip(1).Take(1)) { Console.WriteLine("出现元素第二多的是:"+item.ClassID); }
Linq棒棒的!
这种网上一搜一片的问题,搜搜不就行了