和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

JZ34 第一个只出现一次的字符

原题链接


描述

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


示例1

输入:"google"
返回值:4

思路

还没有学到map,所以用数组模拟,str中的字符做key,数组中的值做value,一边遍历后统计字符,然后再根据str中字符的顺序依次遍历,value为1的就是要的结果。当时这里没想明白,总是想用数组下标进行遍历,但这样就没办法满足题设中第一个的要求,卡了很久。


解答

public static int FirstNotRepeatingChar(String str) {
    int[] map = new int[128];
    for (int i=0;i<str.length();i++)
        ++map[str.charAt(i)];
    for (int i=0; i<str.length(); ++i) {//这里是没想到的,直接用字符串进行遍历!!
        if (map[str.charAt(i)] == 1)
            return i;
    }
    return -1;
}

思路二

用 HashMap存储每一个字符。


解答二

import java.util.HashMap;

public class Solution {
    public int FirstNotRepeatingChar(String str) {
        HashMap<Character, Boolean> hashMap = new HashMap<>();
        char[] chars = str.toCharArray();
        for (char c : chars) {
            hashMap.put(c, hashMap.containsKey(c));
        }
        for (int i = 0; i < chars.length; i++) {
            if (!hashMap.get(chars[i])) return i;
        }
        return -1;
    }
}
posted @ 2021-08-29 17:29  klaus08  阅读(34)  评论(0编辑  收藏  举报