我如何解决 "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()
。您也可以通过一次迭代解决此问题 - 不确定嵌套迭代是关于什么的。
你当然可以让上面的实现更高效,例如通过删除实用程序变量 currentLetter
和 currentCount
。随便玩玩!
给你一个 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()
。您也可以通过一次迭代解决此问题 - 不确定嵌套迭代是关于什么的。
你当然可以让上面的实现更高效,例如通过删除实用程序变量 currentLetter
和 currentCount
。随便玩玩!