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