首页 > 其他 > 详细

Leetcode 387: First Unique Character in a String

时间:2018-01-08 10:31:06      阅读:206      评论:0      收藏:0      [点我收藏+]

Given a string, find the first non-repeating character in it and return it‘s index. If it doesn‘t exist, return -1.

Examples:

s = "leetcode"
return 0.

s = "loveleetcode",
return 2.

 

Note: You may assume the string contain only lowercase letters.

 

 1 public class Solution {
 2     public int FirstUniqChar(string s) {
 3         var dict = new Dictionary<char, IList<int>>();
 4         
// Map 5 for (int i = 0; i < s.Length; i++) 6 { 7 if (!dict.ContainsKey(s[i])) 8 { 9 dict[s[i]] = new List<int>(); 10 } 11 12 dict[s[i]].Add(i); 13 } 14
       // Reduce 15 bool found = false; 16 var result = Int32.MaxValue; 17 foreach (var pair in dict) 18 { 19 if (pair.Value.Count == 1 && pair.Value[0] < result) 20 { 21 found = true; 22 result = pair.Value[0]; 23 } 24 } 25 26 return found ? result : -1; 27 } 28 } 29 30 // traverse the string twice, if the string is super long, performance wouldn‘t be very good 31 public class Solution1 { 32 public int FirstUniqChar(string s) { 33 var dict = new Dictionary<char, int>(); 34 35 foreach (var c in s) 36 { 37 if (!dict.ContainsKey(c)) 38 { 39 dict[c] = 1; 40 } 41 else 42 { 43 dict[c]++; 44 } 45 } 46 47 for (int i = 0; i < s.Length; i++) 48 { 49 if (dict[s[i]] == 1) 50 { 51 return i; 52 } 53 } 54 55 return -1; 56 } 57 }

 

Follow up: what if the string is exetremly long and you have to process it with multi machines?

Answer: I think this is a typical Map-Reduce problem where you can split the string to multi batches, the Map function will be similar as my solution 1, one difference is we should pass the start index of each patch in the original string to the Map function, then the Reduce function will aggregate the Map results and generate the final result.

Leetcode 387: First Unique Character in a String

原文:https://www.cnblogs.com/liangmou/p/8241316.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!