![](/img/trans.png)
[英]While loop crashing browser when requesting data from API with javascript
[英]Browser crashing while loop JavaScript algorithm
伙计们,我正在尝试编写一种算法,在该算法中,我传入一个大字符串,然后让它循环遍历字符串,无论找到什么回文,它都会推送到数组中,但是由于某种原因,一旦我进入while循环,我的浏览器就会崩溃,我没有
function arrOfPalindromes(str) {
var palindromeArrays = []
var plength = palindromeArrays.length
// grab first character
// put that in a temp
// continue and look for match
// when match found go up one from temp and down one from index of loop
// if matched continue
// else escape and carry on
// if palendrome push into array
var counter = 0;
for (var i = 0; i < str.length; i++) {
for (var j = 1; j < str.length - 1; j++) {
if (str[i + counter] === str[j - counter]) {
while (str[i + counter] === str[j - counter]) {
console.log(str[j], str[i])
// append the letter to the last index of the array
palindromeArrays[plength] += str[i]
counter++
}
}
}
}
return palindromeArrays
}
var result2 = arrOfPalindromes('asdfmadamasdfbigccbigsdf')
console.log(result2)
不提算法,但条件
while (str[i + counter] === str[j - counter])
使您的代码崩溃。 当j + counter> str.length返回未定义且与j-counter <0相同时,str [j + counter]有点令人惊讶。 在那里,由于未定义===未定义,因此while循环永远不会结束。
返回相同大小的数组以处理嵌套的palis。
例如:abxyxZxyxab => 00030703000奇数编号的嵌套palis。
例如:asddsa => 003000偶数为pali。
例如:asdttqwe => 00020000我不知道这是否是巴利语,但在这里我们开始
最小的pali宽度为2个字符,因此我从index:1开始并递增直到str.len-1
for (var i = 1; i < str.length-1; i++) {
counter=0;
while(str[i]+1-counter == str[i]+counter || str[i]-counter == str[i]+counter) { // always true when counter is 0
// while (even numbered palis || odd numbered palis)
// IF counter is bigger than 0 but we are still here we have found a pali & middle of the pali is i(or i+0.5) &size of the pali is counter*2(or+1)
if(str[i]+1-counter == str[i]+counter){//even sized pali
res[i]=counter*2;
}else{//odd sized pali
res[i]=counter*2+1;
}
counter++;//see if its a bigger pali.
}
}
没有超级优化,而+ if,else检查相同的东西。 这些可以以某种方式合并。 甚至偶数和奇数都可以通过任何检查来处理。
您不需要使用三个循环。 您可以使用两个for
循环来完成此操作,其中一个从string
的开头开始,另一个从string
。
在这里,我们使用array
reverse()
方法来匹配回文。
此外,我还添加了其他minLength
参数和重复删除逻辑,以使其更加美观。
function findPalindromes(str, minLength) { var palindromes = []; var _strLength = str.length; for (var i = 0; i < _strLength; i++) { for (var j = _strLength - 1; j >= 0; j--) { if (str[i] == str[j]) { var word = str.substring(i, j + 1); //Check if the word is a palindrome if (word === word.split("").reverse().join("")) { //Add minimum length validation and remove duplicates if(word.length >= minLength && palindromes.indexOf(word) === -1){ palindromes.push(word); } } } } } return palindromes; } var result = findPalindromes('asdfmadamasdfbigccbigsdf', 2) console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.