第一个只出现一次的字符

2019-03-29  本文已影响0人  zhouwaiqiang

题目描述

  1. 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)

解题思路

  1. 采用一个LinkedHashMap实现,这个表示有序存储,存储的键为每个出现的字符,值为一个list集合,集合中代表出现了这个键对应的下标索引
  2. 采用这种方式在后续中只需要找到字符对应的值中的size第一个为1的那么就是对应的结果,然后从集合中取出该值返回即可。

源代码实现

import java.util.*;
public class Solution {
    private static Map<Character, List<Integer>> map;
    {
        map = new LinkedHashMap<>();
    }
    public int FirstNotRepeatingChar(String str) {
        if (str==null || str.length()==0) return -1;
        for (int i=0; i<str.length(); i++) {
            char ch = str.charAt(i);
            if (map.containsKey(ch)) {
                List<Integer> temp = map.get(ch);
                temp.add(i);
                map.put(ch, temp);
            } else {
                List<Integer> temp = new ArrayList<>();
                temp.add(i);
                map.put(ch, temp);
            }
        }
        for (Map.Entry<Character, List<Integer>> entry : map.entrySet()) {
            if (entry.getValue().size()==1) return entry.getValue().get(0);
        }
        return -1;
    }
}
上一篇下一篇

猜你喜欢

热点阅读