
获得徽章 0
- #每日一题#
设计一个算法:接收一个字符流,并检查这些字符的后缀是否是字符串数组 words 中的一个字符串。
例如,words = ["abc", "xyz"] 且字符流中逐个依次加入 4 个字符 'a'、'x'、'y' 和 'z' ,你所设计的算法应当可以检测到 "axyz" 的后缀 "xyz" 与 words 中的字符串 "xyz" 匹配。
按下述要求实现 StreamChecker 类:
StreamChecker(String[] words) :构造函数,用字符串数组 words 初始化数据结构。
boolean query(char letter):从字符流中接收一个新字符,如果字符流中的任一非空后缀能匹配 words 中的某一字符串,返回 true ;否则,返回 false。
看到检查后缀 那么反过来就是检查是否为前缀 那么我们可以采用经典的字典树(前缀树) 讲words中的字符串倒序插入字典树 每次查询也从倒序进行查询 查到中间节点是一个单次即可退出展开赞过评论1 - #每日一题#
给出长度相同的两个字符串s1 和 s2 ,还有一个字符串 baseStr 。
其中 s1[i] 和 s2[i] 是一组等价字符。
举个例子,如果 s1 = "abc" 且 s2 = "cde",那么就有 'a' == 'c', 'b' == 'd', 'c' == 'e'。
等价字符遵循任何等价关系的一般规则:
自反性 :'a' == 'a'
对称性 :'a' == 'b' 则必定有 'b' == 'a'
传递性 :'a' == 'b' 且 'b' == 'c' 就表明 'a' == 'c'
例如, s1 = "abc" 和 s2 = "cde" 的等价信息和之前的例子一样,那么 baseStr = "eed" , "acd" 或 "aab",这三个字符串都是等价的,而 "aab" 是 baseStr 的按字典序最小的等价字符串
利用 s1 和 s2 的等价信息,找出并返回 baseStr 的按字典序排列最小的等价字符串。
题目看起来很复杂,理解了就是两个字符串每个位置的字符是同一组可以互相替换,那么就很明显是并查集,将对应的字母连在一起,再贪心构建最小的,从a - z去替换目标字符的字母就是字典序最小展开赞过51 - #每日一题# leetcode 每日一题 ,年龄小的球员分数一定比年龄大的球员分数要低,那么根据年龄进行排序以后 就可以转化为一个经典的LIS问题(最长上升子序列) 经典做法就是动态规划 转移方程:
dp[i]=maxdp[j]+people[i][0] when j<i and people[j][1]<= people[i][1]
推荐先练习Leetcode 300leetcode.cn
展开赞过评论2