firstUniqChar-字符串中的第一个唯一字符(java)

  • 时间:
  • 来源:互联网
  • 文章标签:

问题提出

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

示例:

s = “leetcode”
返回 0

s = “loveleetcode”
返回 2

提示:你可以假定该字符串只包含小写字母。
Related Topics 哈希表 字符串

解体思路

根据题目提示的hash表,很容易想到以下的解题思路
1.创建一个LinkedHashMap,不是HashMap。因为LinkedHashMap可以保持key录入,更新时候的顺序不变。
Map<Character, List<Integer>> map=new LinkedHashMap<>();
格式挨个遍历,放入Map中。第一个参数是字符串不同元素的字符值,第二个记录位置
2.遍历map,如果map的value值,也就是list有多个就继续找,找出第一个value值只有一个的即可,找到它在s中的位置

代码演示:

class Solution {
    public int firstUniqChar(String s) {
        Map<Character, List<Integer>> map=new LinkedHashMap<>();
        for (int i = 0; i < s.length(); i++) {
            List<Integer> list;
            if(map.get(s.charAt(i))==null)
                list=new ArrayList<>();
            else
               list= map.get(s.charAt(i));
            list.add(i);
            map.put(s.charAt(i),list);
        }
        Set<Map.Entry<Character, List<Integer>>> entries = map.entrySet();
        Iterator<Map.Entry<Character, List<Integer>>> iterator = entries.iterator();
        while (iterator.hasNext())
        {
            Map.Entry<Character, List<Integer>> next = iterator.next();
            if(next.getValue().size()!=1)
                continue;
            return s.indexOf(String.valueOf(next.getKey()));
        }
        return -1;
    }
}

效果(不佳)

info
解答成功:
执行耗时:55 ms,击败了5.33% 的Java用户
内存消耗:40.8 MB,击败了5.04% 的Java用户

本文链接http://www.taodudu.cc/news/show-1944502.html