leetcode387:First Unique Character in a String

来源:互联网 发布:owncloud源码 编辑:程序博客网 时间:2024/05/20 20:04

要求:找出第一个在字符串中没有重复的字符,返回它在字符串中的位置。

例如:“leetcode'”  返回0

    “loveleetcode”返回2

注意:一开始直接暴力破解,遍历数组,将除了当前元素a[i]以外的所有元素放入set集合中,如果这个set也包含一个与a[i]相同的元素,那么继续下一次循环。如果set中没有一个元素与a[i]相同,那么立马返回i。 这种方法可以达到目的,但是字符串比较长时,时间会超过限制,因为每一次都要将除去a[i]以外的所有元素变成set,需要n*(n-1)次遍历,所以当字符串比较长时,时间会超过限制。

之后考虑时间问题,循环之间不能嵌套,特别是在遍历整个数组的的时候。因此想到使用HashMap,这种Map要求key值不能重复,我们使用HashMap来记录字符串中每个字符出现的次数,字符作为Key,出现的次数作为value。再遍历字符串,当第一次发现某个a[i]的value=1时,返回这个i即可。注意判断字符串为空这种情况。

public int firstUniqChar(String s) {Map<Character, Integer> hashMap=new HashMap();char[] a=s.toCharArray();int result=0;if(s.length()==0)return -1;hashMap.put(a[0], 1);for(int i=1;i<a.length;i++){if(hashMap.containsKey(a[i]))hashMap.put(a[i], 2);elsehashMap.put(a[i], 1);}char flag='a';for(int i=0;i<a.length;i++){if(hashMap.get(a[i])==1)return i;}return -1;}


0 0
原创粉丝点击