1. 程式人生 > >HackerRank Find first repeating letter in a string

HackerRank Find first repeating letter in a string

題目:

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();
        }