题目

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

示例:

s = "leetcode"
返回 0

s = "loveleetcode"
返回 2

提示:你可以假定该字符串只包含小写字母。

解题思路

方法1

遍历字符串放入到HashMap中,key为每个字符,value为key在map中的个数,不存在为1,存在则+1,然后在一次遍历HashMap第一个为1的就是要返回的。

public static int getIndexByMap(String s) {
    Map<Character, Integer> map = new HashMap<Character, Integer>();
    int index = -1;
    for (int i = 0; i < s.length(); i++) {
        char tmp = s.charAt(i);
        map.put(tmp,map.getOrDefault(tmp,0)+1);
    }
    for (int i = 0; i < s.length(); i++) {
        if (map.get(s.charAt(i)) == 1) {
            index = i;
            break;
        }
    }
    return index;
}

这里用到了Map的一个方法

map.getOrDefault(tmp,0)

Returns the value to which the specified key is mapped, or defaultValue if this map contains no mapping for the key

这样就不用判断key是否存在,不存在设置value为1,存在为value++这样判断的语句了。

方法2

从前面和后面遍历字符,当前面遍历的index==后面遍历的index,说明在字符串中唯一

 public static int getFirstIndex(String s) {
    int index = -1;
    for (int i = 0; i < s.length(); i++) {
        char value = s.charAt(i);
        if (s.lastIndexOf(value) == s.indexOf(value)) {
            index = i;
            break;
        }
    }
    return index;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注