码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 387 First Unique Character in a String

时间:2016-09-03 14:49:53      阅读:113      评论: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.

 

思路:

可以利用两个HashSet,第一个放置出现一次的字符, 第二个放置出现一次的字符,将字符串分放于两个set中之后,根据第一个set的情况来返回相应的下标。或者也可以将字符作为键,出现次数作为值,利用一个HashMap存储,最后找到第一个值为1的键的对应下标即可,二者其实大同小异。

 

解法:

HashSet法

 1 import java.util.Set;
 2 
 3 public class Solution
 4 {
 5     public int firstUniqChar(String s)
 6     {
 7         Set<Character> onceSet = new HashSet<>();
 8         Set<Character> multipleSet = new HashSet<>();
 9         int sign = -1;
10         char[] sArray = s.toCharArray();
11 
12         for(int i = 0; i < sArray.length; i++)
13         {
14             if(multipleSet.contains(sArray[i]))
15                 continue;
16             else if(onceSet.contains(sArray[i]))
17             {
18                 onceSet.remove(sArray[i]);
19                 multipleSet.add(sArray[i]);
20             }
21             else
22                 onceSet.add(sArray[i]);
23         }
24 
25         if(!onceSet.isEmpty())
26         {
27             for(int i = 0; i < sArray.length; i++)
28             {
29                 if(onceSet.contains(sArray[i]))
30                 {
31                     sign = i;
32                     break;
33                 }
34             }
35         }
36 
37         return sign;
38     }
39 }

 

HashMap法:

 1 import java.util.Map;
 2 
 3 public class Solution
 4 {
 5     public int firstUniqChar(int s)
 6     {
 7         Map<Character, Integer> hashmap = new HashMap<>();
 8         int flag = -1;
 9         char[] sArray = s.toCharArray();
10 
11         for(int i = 0; i < sArray.length; i++)
12         {
13             if(! hashmap.containsKey(sArray[i]))
14                 hashmap.put(sArray[i], 1);
15             else
16                 hashmap.put(sArray[i], hashmap.get(sArray[i]) + 1);
17         }
18 
19         if(! hashmap.containsValue(1))
20             flag = -1;
21         else
22         {
23             for(int i = 0; i < sArray.length; i++)
24             {
25                 if(hashmap.get(sArray[i]) == 1)
26                 {
27                     flag = i;
28                     break;
29                 }
30             }
31         }
32 
33         return flag;        
34     }
35 }

 

LeetCode 387 First Unique Character in a String

标签:

原文地址:http://www.cnblogs.com/wood-python/p/5836921.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!