Javascript 检查数组中的项目序列是否重复
我想检查数组元素的任何序列是否重复,并能够设置序列的大小。例如:Javascript 检查数组中的项目序列是否重复,javascript,arrays,Javascript,Arrays,我想检查数组元素的任何序列是否重复,并能够设置序列的大小。例如: var array = ["a", "b", "c", "d", "b", "c", "a"] 如果您检查size=1(意味着如果任何单个元素重复),我应该得到true 如果您检查size=2(意味着如果任何两个元素都在重复),我应该得到true(b,c序列在重复) 如果你检查尺寸=3,我会
var array = ["a", "b", "c", "d", "b", "c", "a"]
如果您检查size=1(意味着如果任何单个元素重复),我应该得到true
如果您检查size=2(意味着如果任何两个元素都在重复),我应该得到true(b,c序列在重复)
如果你检查尺寸=3,我会得到错误
谢谢你的帮助。我真的很坚持这一点这可能不是最有效的答案,但它应该能满足您的需求
function checkSeq(arr, size) {
for (var i = 0; i < arr.length; i++) {
for (var j = i+1; j < arr.length; j++) {
if (arr[i] === arr[j] && isValidSequence(arr, i, j, size)) {
return true;
}
}
}
return false;
}
function isValidSequence(arr, i, j, size) {
for (var k = 1; k < size; k++) {
if (j+k >= arr.size || arr[i+k] !== arr[j+k]) {
return false;
}
}
return true;
}
功能检查顺序(arr,大小){
对于(变量i=0;i=arr.size | | arr[i+k]!==arr[j+k]){
返回false;
}
}
返回true;
}
我检查了你的3个条件,得到了正确的回答
checkSeq(数组,1)//true
checkSeq(数组,2)//true
checkSeq(array,3)//false
解决该任务的另一种方法是检查宽度为N
的滑动窗口中的散列(串联值)是否多次出现:
const src=['a','b','c','d','b','c','a'],
hasDupSeqOfSizeN=(arr,N,hashMap=[])=>
arr.some(u,i,u,hash=arr.slice(i,i+N).join('\ud8ff'))=>
hashMap.includes(散列)| |(hashMap.push(散列),false))
console.log(hasDupSeqOfSizeN(src,2))
.as控制台包装{min height:100%;}
这里有一个解决方案,它应该适用于不仅仅是字符的数组项:
常量数组=[“a”、“b”、“c”、“d”、“b”、“c”、“a”、“a”、“a”、“b”、“c”]
功能检查顺序(顺序、大小){
const matches={};//存储潜在序列的计数,例如{a,b':1,'b,c':2}
for(设i=0;i=2){
返回true;
}
}
返回false;
}
log(检查序列(数组,1));
log(检查序列(数组,2));
log(检查序列(数组,3));
log(检查序列(数组,4))StackOverflow不是免费的编码服务。你应该会的。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参见,并以:)我同意,您应该展示您如何尝试解决此问题此示例代码,前提是在第1行中出现语法错误时“按原样”确实失败。我对javascript不太熟悉。添加函数声明是否修复了语法错误?1)语法错误已修复。。。2) 与FrostyZombi3方法相同的结果。。。3) 还有一个问题。。。第四行。。。将
this.isValidSequence
更改为isValidSequence
。此示例失败,例如。。。数组=[“b”,“b”]
和。。。检查序列(数组,1)
。如果array=[“b”,“b”]
和size=1(序列长度),那么您的序列将是“b”,这是重复的,因此它应该返回true。非常抱歉。我在测试环境中确实遇到了复制粘贴错误。我会继续测试,结果可能会把你的这个a.投得更高。。。。[“a”、“b”、“c”、“d”、“e”、“c”、“d”、“e”、“c”、“d”、“e”、“c”]
和console.log(检查序列(数组,4))的预期结果是什么
和[“a”、“b”、“c”、“d”、“e”、“c”、“d”、“e”、“c”、“d”]
和控制台日志的预期结果(检查序列(数组,4))
以及console.log(检查序列(数组,5))代码>?我明白了,你把我带到那里了。。。[“c”、“d”、“e”、“c”、“d”、“e”、“c”]
中的重叠将导致大小为4的结果为true,大小为5的结果为true