187. 重复的DNA序列
class Solution {
public List<String> findRepeatedDnaSequences(String s) {
int n=s.length();
ArrayList<String> list=new ArrayList<>();
if(n<10) return list;
HashMap<String,Integer> map=new HashMap<>();
for(int i=0;i<=n-10;i++){
String temp=s.substring(i,i+10);
map.put(temp,map.getOrDefault(temp,0)+1);
if(map.get(temp)==2) list.add(temp);
}
return list;
}
}
3. 无重复字符的最长子串
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character,Integer> map=new HashMap<>();
int n=s.length();
int max=0;
int left=0;
for(int i=0;i<n;i++){
if(map.containsKey(s.charAt(i)) ){
left=Math.max(left,map.get(s.charAt(i))+1);
}
map.put(s.charAt(i),i);
max=Math.max(max,i-left+1);
}
return max;
}
}
209. 长度最小的子数组
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int sum=0;
for(int num:nums) sum+=num;
if(sum<target) return 0;
int min=nums.length;
int left=0;
sum=0;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
while(sum>=target){
min=Math.min(min,i-left+1);
sum-=nums[left];
left++;
}
}
return min;
}
}
77. 组合
class Solution {
List<List<Integer>> res=new ArrayList<>();
List<Integer> path=new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
backtracking(n,k,1);
return res;
}
public void backtracking(int n,int k,int index){
if(path.size()==k){
res.add(new ArrayList<>(path));
return;
}
for(int i=index;i<=n;i++){
path.add(i);
backtracking(n,k,i+1);
path.remove(path.size()-1);
}
}
}