u8,u8国际,u8国际官方网站,u8国际网站,u8国际网址,u8国际链接,u8体育,u8体育官网,u8体育网址,u8注册,u8体育网址,u8官方网站,u8体育APP,u8体育登录,u8体育入口昨晚给辅导班的同学们直播讲解了哈希表的一些知识点和相关的算法题,由于哈希表属于偏简单的内容、同时这几道题目难度也不高,所以上课的同学们全部都跟下来。
令我感到意外的是,有个同学连续四天,每晚 12 点前都能把作业全部完成,并且有些题目还能理解多种解法,让我们团队的许老师都连续夸奖好几次。
小王在进行游戏大闯关,有一个关卡需要输入一个密码才能通过,密码获得的条件如下:在一个密码本中,每一页都有一个由 26 个小写字母组成的若干位密码,从它的末尾开始依次去掉一位得到的新密码也在密码本中存在。请输出符合要求的密码,如果由多个符合要求的密码,则返回字典序最大的密码。若没有符合要求的密码,则返回空字符串。
密码本由一个字符串数组组成,不同元素之间使用空格隔开,每一个元素代表密码本每一页的密码。
最朴素的解法是将所有字符串都存在一个哈希表 password_set 中,然后遍历字符串数组中的每一个密码 password ,对每一个 password 都去判断其所有的前缀是否也位于 password_set 中。如果满足,则把 password 和 ans 比较并且更新 ans 。
前缀 h 、 he 、 hel 对于单词 hello 而言,显然是重复计算了。
假设我们已经知道单词 hell 是一个有效的密码,那么对于单词 hello ,我们就只需要去考虑 hell 这个前缀,而不需要再去考虑 h 、 he 、 hel 这三个前缀了。
换句话说,单词 hello 是否是一个有效的密码,可以由其去掉末尾的前缀 hell 是否是一个有效的密码来决定。这本质上是一种动态规划的思想。(动态规划更详细的内容在后面会讲到)
前缀 h 、 he 、 hel 对于单词 hello 而言,显然是重复计算了。
假设我们已经知道单词 hell 是一个有效的密码,那么对于单词 hello ,我们就只需要去考虑 hell 这个前缀,而不需要再去考虑 h 、 he 、 hel 这三个前缀了。
换句话说,单词 hello 是否是一个有效的密码,可以由其去掉末尾的前缀 hell 是否是一个有效的密码来决定。这本质上是一种动态规划的思想。(动态规划更详细的内容在后面会讲到)
如果用动态规划的语言来描述,即: password是一个有效密码,****当且仅当password[:-1]是一个有效密码。
那么现在问题就变成了:如何能够在判断password是一个有效密码之前,就先判断得到password[:-1] ** 是否有效? **这个问题就很简单了。我们只需要对原来的字符串数组 password_lst按照字典序进行排序,就可以保证在 password 进行判断时, password[:-1] 已经被判断过了。
注意 valid_set初始化时要包含一个空串,因为只有一个字符的密码比如 h ,去掉最末尾的字符之后是一个空串 , h 理应是一个有效的密码,故 应该存在于 valid_set 中。即:
# password有可能不符合要求,设置一个标记isValid,初始化为True表示该密码符合要求
# 若某一个前缀不位于哈希集合中,则该password无效,修改isValid为False,且退出循环
N 为单词数目, M 为单词平均长度, D 为前缀树的节点数,远小于 NM 。
前不久接了几个针对华为 OD 考试的 1v1 辅导,一个零基础的同学机试成绩为 250,有编程基础的同学机试成绩为 355,均顺利拿到了 Offer。
通过每晚直播上课的形式,在 20 天的时间里面帮助大家拿下 160 道 LeetCode 算法题和 50 道面试真题。
这门课程不仅适用于准备华为 OD 面试的同学,同时也适用于需要短期突破算法面试的同学。
报名的前提是你每天至少可以投入 4 小时以上的学习时间!返回搜狐,查看更多