检查字符串的两端是否在javascript中相等

时间:2018-08-13 20:57:22

标签: javascript

我想编写一个函数来测试如果颠倒了诸如“(())”或“ << >>”之类的字符串在两端是否相等。像“((())”这样的东西会是假的

有这样的名字吗?我认为这是一种常见的算法。

由于某种原因,反向将其拆分为一个数组后,它什么都不做?

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("(())")

4 个答案:

答案 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("(())"))