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

2021-12-23 18:23:37 浏览数 (1)

方法1,利用字符的hash特性实现随机读取
代码语言:javascript复制
   public int FirstNotRepeatingChar_m1(String str) {
        HashMap<Character,Integer> charCount=new HashMap<>();
        for (int i = 0; i < str.length(); i  ) {
            charCount.put(str.charAt(i),charCount.get(str.charAt(i))==null?1:(charCount.get(str.charAt(i)) 1));
        }

        for (int i = 0; i < str.length(); i  ) {
            if (charCount.get(str.charAt(i))==1){
                return i;
            }
        }

        return -1;
    }
方法2,利用利用每个字母的ASCII码的特殊性做存储,然后随机读取

说明 1.int默认值就是0,因此在第一个for进行添加统计记录时候我们可以直接 2.为啥这里设置初始数组长度位58 1.首先题目说明是字母 2.ascii表里Z到a直接还有6个其他字符,如[ ] ^,因此这里设置的长度是58而不是52可以参见ascll编码对应10进制的值

代码语言:javascript复制
public int FirstNotRepeatingChar(String str) {
        int[] charCount=new int[58];
        for (int i = 0; i < str.length(); i  ) {
            charCount[str.charAt(i)-'A']  ;
        }


        for (int i = 0; i < str.length(); i  ) {
            if (charCount[str.charAt(i)-'A']==1){
                return i;
            }
        }

        return -1;
    }

0 人点赞