第一个只出现一次的字符

第一个只出现一次的字符

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


这道题没什么好解法,就是哈希。这里它限定了“全部由字母组成”,所以只需要考虑a-zA-Z即可,但是要注意哈希表的长度要设置为58而不是2*26.因为小写和大写直接还有几个其他符号

遍历两次字符串,第一次往哈希表里填,第二次在哈希表中找只出现一次的。因为是遍历字符串,所以也就保证了是“第一个”


public class Solution {
    public int FirstNotRepeatingChar(String str) {
        int length=str.length();
        if(length<1){
            return -1;
        }
        int[] hash=new int[58];
        for(int i=0;i<length;i++){
            hash[str.charAt(i)-'A']++;
        }
        for(int i=0;i<length;i++){
            if(hash[str.charAt(i)-'A']==1){
                return i;
            }
        }
        return -1;
        
    }
}

  1. 使用new动态声明的数组会自动初始化为0
  2. ASCII码中,大写在前,小写在后
posted @ 2020-03-06 15:33  别再闹了  阅读(64)  评论(0)    收藏  举报