每日三题-无重复字符的最长子串、最长连续序列、找到字符串中所有字母异位词
创始人
2024-04-05 11:23:21
0

👨‍💻个人主页: 才疏学浅的木子
🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️
📒 本文来自专栏: 算法
🌈 算法类型Hot100题 🌈
❤️ 支持我:👍点赞 🌹收藏 🤟关注

每日三题

  • 无重复字符的最长子串
  • 最长连续序列
  • 找到字符串中所有字母异位词

无重复字符的最长子串

在这里插入图片描述

解法一

暴力
使用双层for循环来遍历,第一层for循环的是开头,第二层的是结尾
使用HashSet来保存字符,如果HashSet中存在时,add操作就会返回false,直接结束本次循环

class Solution {public int lengthOfLongestSubstring(String s) {int len  = s.length();if(len == 0 || len == 1)return len;int ans = 0;for(int i = 0;i < len;i++){int t = 1;HashSet set = new HashSet<>();set.add(s.charAt(i));for(int j = i+1;j < len;j++){if(!set.add(s.charAt(j))){break;}t++;}ans = Math.max(t,ans);}return ans;}
}

解法二

滑动窗口
维护滑动窗口中的值是一定没有重复元素的
右边界就是当前循环的i
左边界最开始就是left = 0;
然后如果滑动窗口中有当前值就把left移动到上一个当前值的上一个位置
注意: 我滑动窗口用的HashMap所以left需要比较left与当前值的上一个位置的大小

class Solution {public int lengthOfLongestSubstring(String s) {int len  = s.length();if(len == 0 || len == 1)return len;int ans = 0;int left = 0;HashMap map = new HashMap<>();for(int i = 0;i < len;i++){if(map.containsKey(s.charAt(i))){left = Math.max(left,map.get(s.charAt(i))+1);}map.put(s.charAt(i),i);ans = Math.max(ans,i-left+1);}return ans;}
}

最长连续序列

在这里插入图片描述

解法一

暴力
把所有数据全加入到Set集合
不断枚举当前值的下一个是否在Set中存在,如果存在就一直枚举下去
剪枝: 如果set中存在当前值num的减一,那么不向后遍历这个数,因为他总是短于num-1开始的数字
举例: 假如num ~ num+n 是一段答案那么num-1 ~ num+n是优于num~num+n的

class Solution {public int longestConsecutive(int[] nums) {int len = nums.length;if(len <= 1)return len;HashSet set = new HashSet<>();for(int i = 0;i < len;i++){set.add(nums[i]);}int res = 0;for(int i = 0;i < len;i++){if(!set.contains(nums[i]-1)){int curNum = nums[i];;int t = 1;while(set.contains(curNum+1)){t++;curNum++;}res = Math.max(res,t);}}return res;}
}

找到字符串中所有字母异位词

在这里插入图片描述

解法一

滑动窗口

class Solution {public List findAnagrams(String s, String p) {int slen = s.length();int plen = p.length();List list = new ArrayList<>();if(slen < plen) return list;int []parr = new int[26];int []sarr = new int[26];for(int i = 0;i < plen;i++){parr[p.charAt(i)-'a']++;sarr[s.charAt(i)-'a']++;}if(Arrays.equals(sarr,parr)){list.add(0);}for(int i = 1;i <= slen-plen;i++){sarr[s.charAt(i-1)-'a']--;sarr[s.charAt(i+plen-1)-'a']++;if(Arrays.equals(sarr,parr)){list.add(i);}}return list;}
}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...