🚀 算法题 🚀 |
🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯
🚀 算法题 🚀 |
🍔 目录
- 🚩 题目链接
- ⛲ 题目描述
- 🌟 求解思路&实现代码&运行结果
- ⚡ 滑动窗口 & map
- 🥦 求解思路
- 🥦 实现代码
- 🥦 运行结果
- 💬 共勉
🚩 题目链接
- 187. 重复的DNA序列
⛲ 题目描述
DNA序列 由一系列核苷酸组成,缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。
例如,“ACGAATTCCG” 是一个 DNA序列 。
在研究 DNA 时,识别 DNA 中的重复序列非常有用。
给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。
示例 1:
输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
输出:[“AAAAACCCCC”,“CCCCCAAAAA”]
示例 2:
输入:s = “AAAAAAAAAAAAA”
输出:[“AAAAAAAAAA”]
提示:
0 <= s.length <= 105
s[i]==‘A’、‘C’、‘G’ or ‘T’
🌟 求解思路&实现代码&运行结果
⚡ 滑动窗口 & map
🥦 求解思路
- 通过通读题目的意思,我们知道,题目让我们求的是,找到所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。
- 我们通过维护一个大小为10的滑动窗口,并通过map来进行计数,收集并返回所有满足题目的DNA序列。
- 实现代码如下。
🥦 实现代码
class Solution {
public List<String> findRepeatedDnaSequences(String s) {
List<String> ans=new ArrayList<>();
HashMap<String,Integer> map=new HashMap<>();
int n=s.length();
for(int i=0;i<=n-10;i++){
String str=s.substring(i,i+10);
int cnt=map.getOrDefault(str,0);
if(cnt==1) ans.add(str);
map.put(str,cnt+1);
}
return ans;
}
}
🥦 运行结果
💬 共勉
最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉! |