如何在javascript中使用 Map() 解决“由字符 A、C、G 和 T 组成的字符串。查找最长重复”的问题
Posted
技术标签:
【中文标题】如何在javascript中使用 Map() 解决“由字符 A、C、G 和 T 组成的字符串。查找最长重复”的问题【英文标题】:How can I solve a problem which is "a string consisting of characters A, C, G, and T. Find the longest repetition" with Map() in javascript 【发布时间】:2022-01-16 09:43:48 【问题描述】:给你一个 DNA 序列:一个由字符 A、C、G 和 T 组成的字符串。你的任务是找出序列中最长的重复。这是一个最大长度的子字符串,只包含一种类型的字符。
我正在尝试用 javascript 中的 Map() 解决这个问题。
我的解决方案:
let n='ATTCGGGA';
var reptition = function(n)
let strToArr=n.split('');
for(let i=0; i<strToArr.length; i++)
let map=new Map();
map.set(strToArr[i],0);
const iterator1 = map.values();
for (const [key, value] of map.entries())
if(map.has(strToArr[i]))
map.set(strToArr[i],iterator1.next().value+1)
console.log(key + ' : ' + value)
;
console.log(reptition(n));
我正在尝试循环遍历序列中的所有字符,然后在 Map() 中将其设置为作为字符的键,并将 1 作为所有字符的值。如果相同的字符重复,则其值将增加 1,最后返回最长的重复。
但我不知道该怎么做?
【问题讨论】:
@pilchard 不,我正在尝试用 Map() 解决这个问题。在上面的讨论中,使用 Map() 没有解决方案。 【参考方案1】:这是一个更正的实施:
let n = 'ATTCGGGA';
var reptition = function (n)
let strToArr = n.split('');
let map = new Map();
let currentLetter = null;
let currentCount = 0;
for (let i = 0; i < strToArr.length; i++)
if (currentLetter === strToArr[i])
currentCount++;
else
currentCount = 1;
currentLetter = strToArr[i];
const previousCount = map.get(currentLetter) ?? 0;
if (currentCount > previousCount) map.set(currentLetter, currentCount);
return Array.from(map.entries()).sort((prev, next) => next[1] - prev[1])[0];
;
console.log(reptition(n));
您在循环的每次迭代中都重新声明 new Map()
。您也可以通过一次迭代来解决这个问题 - 不确定嵌套迭代是关于什么的。
您当然可以使上述实现更高效,例如通过删除实用程序变量currentLetter
和currentCount
。随便玩玩吧!
【讨论】:
以上是关于如何在javascript中使用 Map() 解决“由字符 A、C、G 和 T 组成的字符串。查找最长重复”的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Javascript 中的 Map 键上使用 .map()
JavaScript中 forEach map 方法 无法跳出循环问题及解决方案
如何在注册表单中添加标记和中心地图 django-map-widget