0    课程地址

https://coding.imooc.com/lesson/207.html#mid=15344

 

1    重点关注

1.1    应用场景

hashtable和hashMap底层,安全加密,唯一标志,数据校验,散列函数,负载均衡,数据分片,分布式存储,CRC校验等

参考:https://zhuanlan.zhihu.com/p/572831003

 

1.2    使用哈希表需注意的问题:

  • a  键如何转化为索引?使用合理的哈希函数
  • b  如何解决哈希冲突?

 

2    课程内容

2.1    哈希表(散列表)定义

每个字符和索引相对应,码值映射到一个表中的一个位置来访问记录,增删改查均是O(1)复杂度。

 

2.2    哈希冲突

哈希冲突:很难保证每一个键对应同唯一的索引,两个不同的键对应同一个索引被称为哈希冲突

 

 

3    Coding

3.1    使用哈希表应用思想的场景

解题思想:

根据索引找到字符 建立a-z对应的0-25的减值对,键为索引,值为每个字符出现的次数。遍历字符串的每个字符的索引,可以找到值为1对应的索引。未找到,返回-1;

 

leetCode :387

问题:字符串中第一个唯一字符,假设所有字符串为小写字母

 

代码:

class Solution {
    public int firstUniqChar(String str) {
        int[] arr = new int[26];

        for(int i = 0;i<str.length();i++){
            arr[str.charAt(i)-'a']++;
        }

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

 

执行结果:

 

posted on 2023-09-25 08:33  菜鸟乙  阅读(2)  评论(0编辑  收藏  举报