标签:
如果不考虑时间复杂度,则较简单的算法为:
private static string FirstNotRepeatingChar1(string str) { for (int i = 0; i < str.Length; i++) { if (str.IndexOf(str.ElementAt(i)) == str.LastIndexOf(str.ElementAt(i))) { return str.ElementAt(i).ToString(); } } return string.Empty; }
如果要求时间复杂度为O(n),则可以参考下面的一种实现:
private static char FirstNotRepeatingChar2(string str) { if (string.IsNullOrEmpty(str)) { return ‘\0‘; } char[] array = str.ToCharArray(); const int size = 256; // 借助数组来模拟哈希表,只用1K的空间消耗 uint[] hastTable = new uint[size]; // 初始化数组 for (int i = 0; i < size; i++) { hastTable[i] = 0; } for (int i = 0; i < array.Length; i++) { hastTable[array[i]]++; } for (int i = 0; i < array.Length; i++) { if (hastTable[array[i]] == 1) { return array[i]; } } return ‘\0‘; }
标签:
原文地址:http://www.cnblogs.com/laixiancai/p/4810454.html