我如何解决 "a string consisting of characters A, C, G, and T. Find the longest repetition" 中的 javascript 中的 Map() 问题

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

给你一个 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,最后,将返回最长的重复。

但我不知道该怎么做?

这里是更正的实现:

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()。您也可以通过一次迭代解决此问题 - 不确定嵌套迭代是关于什么的。

你当然可以让上面的实现更高效,例如通过删除实用程序变量 currentLettercurrentCount。随便玩玩!