我想编写一个函数来测试如果颠倒了诸如“(())”或“ << >>”之类的字符串在两端是否相等。像“((())”这样的东西会是假的
有这样的名字吗?我认为这是一种常见的算法。
由于某种原因,反向将其拆分为一个数组后,它什么都不做?
function ifEqual(str) {
let left = str.slice(0, str.length / 2);
let right = str.slice(str.length / 2).split("").reverse().join("");
console.log(left);
console.log(right);
return left === right;
}
ifEqual("(())")
答案 0 :(得分:1)
将相反的内容存储在对象中。没有其他方法可以确定<
与>
的对立面。然后通过一个函数运行您的字符串,该函数占用字符串的一半,并检查是否按正确的顺序进行了另一半相反。请注意,如果长度为偶数,则以下解决方案有效。
const opposites = {
"(": ")",
")": "(",
"<": ">",
">": "<",
"[": "]",
"]": "["
};
function isMirrored(str) {
const half = str.slice(0, str.length / 2);
const reversed = half.split("").reverse().join("");
let mirrored = half;
for(char of reversed) {
mirrored += opposites[char];
}
return str === mirrored;
}
console.log(isMirrored("[[]]"));
console.log(isMirrored("<<>>"));
console.log(isMirrored("<()>"));
console.log(isMirrored("([]("));
console.log(isMirrored("(())"));
答案 1 :(得分:1)
const REVERSED = {
"(": ")",
"<": ">",
"[": "]",
}
function ifEqual(str) {
let left = str.slice(0, str.length / 2).split('');
let right = str.slice(str.length / 2, str.length).split('');
return left.every((next, index) => REVERSED[next] == right[right.length - index - 1])
}
console.log(ifEqual("(())"))
console.log(ifEqual("<(>>"))
console.log(ifEqual("<[[(())]]>"))
答案 2 :(得分:1)
也许您正在寻找平衡的括号
var balancedParens = function(str) {
var stack = [];
var open = { '{': '}', '[': ']', '(': ')' };
var closed = { '}': true, ']': true, ')': true };
for (var i = 0; i < str.length; i ++) {
var chr = str[i];
if (open[chr]) {
stack.push(chr);
} else if (closed[chr]) {
if (open[stack.pop()] !== chr) return false;
}
}
return stack.length === 0;
};
https://medium.com/@robhitt/balance-parenthesis-in-javascript-60f451a00c4c
答案 3 :(得分:0)
(())
并不是回文,无论看起来如何对称。不要让视错觉欺骗您。贝娄是JavaScript中回文检查器算法的常见实现。
function ifEqual(str) {
return str === str.split("").reverse().join("")
}
console.log(ifEqual("(())"))