HackerRank Find first repeating letter in a string
阿新 • • 發佈:2018-12-24
題目:
Find first repeating letter in a string.
比如輸入“abcba”, 返回“a”
思路1:
找出第1個元素,然後判斷剩下的字串是否包含第1個元素;
找到第2個元素,然後判斷剩下的字串是否包含第2個元素;
以此類推……
有則返回charArray[i]
時間複雜度:O(N^2)
C#程式碼:
public static char FirstRepeatingLetter(string str) { char[] charArray = str.ToCharArray(); for (int i = 0; i < charArray.Length; i++) { int j = i + 1; if (str.Substring(j).Contains(charArray[i])) return charArray[i]; } return new Char(); }
思路2(優化後)
時間複雜度:O(N)
利用HashMap/Dictionary
1 先統計所有的頻率,O(N)
2 找出Value(頻率)大於1的Key
C#程式碼:
public static char FirstRepeatingLetter(string str) { Dictionary<char, int> charFrequencyDic = new Dictionary<char, int>(); char[] charArray = str.ToCharArray(); for (int i = 0; i < charArray.Length; i++) { if(!charFrequencyDic.ContainsKey(charArray[i])) charFrequencyDic.Add(charArray[i],1); else charFrequencyDic[charArray[i]]+=1; } var query = charFrequencyDic.Where(r => r.Value > 1).Select(r => r.Key); if (query.Any()) return query.First(); else return new Char(); }