A.每日一题:1967题+1331题 1967题题目链接1967. 作为子字符串出现在单词中的字符串数目简单算法原理解法枚举0ms击败100.00%时间复杂度O(N)思路很简单直接看 word 中是否包含 patterns 中的字符串即可包含就计数Java代码class Solution { //1967. 作为子字符串出现在单词中的字符串数目 public int numOfStrings(String[] patterns, String word) { int cnt0; for(String s:patterns) if(word.contains(s)) cnt; return cnt; } }1331题题目链接1331. 数组序号转换简单算法原理解法一二分查找29ms击败57.17%时间复杂度O(n logn)拿示例一举例将 arr [ 20 , 20 , 10 , 30 ] 复制一份排序去重后得到 sorted [ 10 , 20 , 30 ]在这个数组上分别二分查找 20201030 的下标1 即为答案解法二哈希表29ms击败57.17%时间复杂度O(n logn)拿示例一举例将 arr [ 20 , 20 , 10 , 30 ] 复制一份排序去重后得到 sorted [ 10 , 20 , 30 ]然后创建一个哈希表把 102030 分别映射到123最后查询 20201030 在哈希表中对应的 value 即为答案Java代码class Solution { //1331. 数组序号转换 //解法一二分查找 public int[] arrayRankTransform(int[] arr) { //排序 int[] sortedarr.clone(); Arrays.sort(sorted); //去重 int index0; for(int x:sorted) //如果这个数是第一个或者与前一个不同说明是一个新面孔 if(index0||x!sorted[index-1]) sorted[index]x; for(int i0;iarr.length;i) arr[i]Arrays.binarySearch(sorted,0,index,arr[i])1; return arr; } }class Solution { //1331. 数组序号转换 //解法二哈希表 public int[] arrayRankTransform(int[] arr) { //排序 int[] sortedarr.clone(); Arrays.sort(sorted); //去重的同时构建哈希表 MapInteger,Integer ranknew HashMap(); int index0; for(int x:sorted){ //如果这个数是第一个或者与前一个不同说明是一个新面孔 if(index0||x!sorted[index-1]) rank.put(x,rank.size()1); index; } for(int i0;iarr.length;i) arr[i]rank.get(arr[i]); return arr; } }