如何编写一个JavaScript函数来检查字符串中的第一个字符和最后一个字符是否相等

迈克L5799

我一直在进行此javascript挑战,并且已经很接近了,但是有些地方不对了。这是挑战:

给定一个包含三种大括号类型的字符串数组:round(),square []和curl {}您的任务是编写一个函数,检查每个字符串中的大括号是否正确匹配。如果每个字符串中的花括号都匹配,则将1打印到标准输出(console.log);如果不匹配,则将0打印(每行一个结果)

我的代码是这样的:

var infoToParse = [ ")(){}", "[]({})", "([])", "{()[]}", "([)]" ]; 

function checkBraces(infoToParse) {
    var tabChars = infoToParse;
    for (i= 0; tabChars.length - 1; i+=1) {
        if (tabChars[i].charAt(0) === tabChars[i].charAt(tabChars[i].length-1)){
            console.log(1);
        }else{
            console.log(0);
        }
    }
}

checkBraces(infoToParse);

当前数组项的输出应为Output:0 1 1 1 0

冰刺

我想您可以通过这种方式做到这一点,并保持起始位置的“树状”。除了您自己的测试用例外,没有进行其他测试:)

var testCases = [")(){}", "[]({})", "([])", "{()[]}", "([)]"];

var braceType = {
  round: ["(", ")"],
  curly: ["{", "}"],
  square: ["[", "]"]
};

var bracePosition = {
  start: ["{", "(", "["],
  end: ["}", ")", "]"]
};

function typeOfBraces(sign) {
  for (var property in braceType) {
    if (braceType[property].indexOf(sign) < 0) {
      continue;
    }
    if (bracePosition.start.indexOf(sign) < 0) {
      return {
        type: property,
        position: "end"
      };
    } else {
      return {
        type: property,
        position: "start"
      };
    }
  }
  throw "Sign is not a brace!";
};

function Braces(brace, parent, type) {
  this.brace = brace;
  this.parent = parent || null;
  this.type = type || {
    type: 'init',
    position: ''
  };
  this.children = [];

  this.nextBrace = function(nextSign) {
    var nextType = typeOfBraces(nextSign);
    if (nextType.position === 'start') {
      var child = new Braces(nextSign, this, nextType);
      this.children.push(child);
      return child;
    }
    if (nextType.position === 'end') {
      if (this.type.position === '') {
        throw 'Cannot start with an end tag!';
      }
      if (this.type.position === 'end' && this.parent === null) {
        throw 'Cannot end the sequence';
      }
      if (this.type.position === 'end' && this.parent.position === 'start') {
        if (this.type.type === this.parent.type) {
          var child = new Braces(nextSign, this.parent, nextType);
          this.parent.children.add(child);
          return this.parent;
        }
      }
    }
    if (this.type.position === 'start' && nextType.type === this.type.type && nextType.position === 'end') {
      return this.parent;
    }
    return new Braces(nextSign, this, nextType);
  };
}

for (var i = 0; i < testCases.length; i++) {
  var brace = new Braces(testCases[i]);
  for (var j = 0, len = testCases[i].length; j < len; j++) {
    try {
      brace = brace.nextBrace(testCases[i][j]);
    } catch (e) {
      console.log(e);
      brace = null;
      break;
    }
  }
  if (brace != null && brace.parent == null) {
    // valid entry
    console.log(brace);
    console.log(testCases[i] + " is a valid sequence");
  } else {
    // invalid entry
    console.log(testCases[i] + " is an invalid sequence");
  }
}

或者,使其变得更简单并检查一下括号:

function validBraces(braceSequence) {
  var stack = '',
    i, len, lastStack = -1,
    toAdd = "{([",
    toRemove = "})]",
    sign;
  for (i = 0, len = braceSequence.length; i < len; i++) {
    sign = braceSequence[i];
    if (toAdd.indexOf(sign) >= 0) {
      stack += sign;
      lastStack++;
    } else if (toRemove.indexOf(sign) >= 0) {
      if (toAdd.indexOf(stack.charAt(lastStack)) !== toRemove.indexOf(sign)) {
        // format exception
        console.warn('Format exception, didn\'t expect ' + sign + ' (current stack: ' + stack + ')');
        return false;
      } else {
        stack = stack.slice(0, -1);
        lastStack--;
      }
    } else {
      console.warn('Invalid character exception, didn\'t expect ' + sign + ' (current stack: ' + stack + ')');
      return false;
    }
  }
  return true;
}

var testCases = [")(){}", "[]({})", "([])", "{()[]}", "([)]"];

for (var i = 0; i < testCases.length; i++) {
  if (validBraces(testCases[i])) {
    console.log(testCases[i] + ' is a valid sequence');
  } else {
    console.log(testCases[i] + ' is an invalid sequence');
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查字符串中的第一个字符

来自分类Dev

替换字符串中的第一个和最后一个字符(javascript)

来自分类Dev

如何使用`Util class`从长字符串中获取最后一个字符和第一个字符?

来自分类Dev

检查字符串的第一个字符是否包含数组中的值

来自分类Dev

字符串中第一个和最后一个字符的范围

来自分类Dev

返回范围,字符串中的第一个和最后一个字符

来自分类Dev

Bash删除字符串中的第一个和最后一个字符

来自分类Dev

从字符串中删除第一个和最后一个字符

来自分类Dev

交换字符串中的最后一个和第一个字符

来自分类Dev

字符串中第一个和最后一个字符的范围

来自分类Dev

Bash删除字符串中的第一个和最后一个字符

来自分类Dev

如何在Swift中检查字符串的最后一个字符是否等于“ a”

来自分类Dev

C#如何交换字符串中的第一个字符与最后一个字符

来自分类Dev

使用switch语句检查字符串的第一个字符是否为大写

来自分类Dev

如何检查字符串中出现的第一个字符?

来自分类Dev

检查字符串中的第一个字符-电话号码

来自分类Dev

字符串的第一个和最后一个字符

来自分类Dev

如何检查列表中每个字符串的第一个字符是否以一组特定的字符开头?

来自分类Dev

如何检查一个单词的第一个和最后一个字符在 Ruby 中是否相同?

来自分类Dev

编写一个函数,将一个字符串中的第一个匹配项从另一个字符串中删除。

来自分类Dev

如何检查bash字符串中的最后一个字符?

来自分类Dev

我如何编写一个函数来从数组形成一个字符串?

来自分类Dev

检查一个字符串是否在另一个字符串中的任何字符的最佳方法javascript

来自分类Dev

检查一个字符串是否在另一个字符串中的任何字符的最佳方法javascript

来自分类Dev

如何检查字符串中的第一个字母是数字

来自分类Dev

如果仅在多行字符串中仅作为第一个和最后一个字符出现,如何替换双引号?

来自分类Dev

如何在Rust中删除字符串的第一个和最后一个字符?

来自分类Dev

如何从爆炸的PHP字符串中删除第一个和最后一个字符

来自分类Dev

如何获取字符串中第一个和最后一个字符的索引?

Related 相关文章

  1. 1

    检查字符串中的第一个字符

  2. 2

    替换字符串中的第一个和最后一个字符(javascript)

  3. 3

    如何使用`Util class`从长字符串中获取最后一个字符和第一个字符?

  4. 4

    检查字符串的第一个字符是否包含数组中的值

  5. 5

    字符串中第一个和最后一个字符的范围

  6. 6

    返回范围,字符串中的第一个和最后一个字符

  7. 7

    Bash删除字符串中的第一个和最后一个字符

  8. 8

    从字符串中删除第一个和最后一个字符

  9. 9

    交换字符串中的最后一个和第一个字符

  10. 10

    字符串中第一个和最后一个字符的范围

  11. 11

    Bash删除字符串中的第一个和最后一个字符

  12. 12

    如何在Swift中检查字符串的最后一个字符是否等于“ a”

  13. 13

    C#如何交换字符串中的第一个字符与最后一个字符

  14. 14

    使用switch语句检查字符串的第一个字符是否为大写

  15. 15

    如何检查字符串中出现的第一个字符?

  16. 16

    检查字符串中的第一个字符-电话号码

  17. 17

    字符串的第一个和最后一个字符

  18. 18

    如何检查列表中每个字符串的第一个字符是否以一组特定的字符开头?

  19. 19

    如何检查一个单词的第一个和最后一个字符在 Ruby 中是否相同?

  20. 20

    编写一个函数,将一个字符串中的第一个匹配项从另一个字符串中删除。

  21. 21

    如何检查bash字符串中的最后一个字符?

  22. 22

    我如何编写一个函数来从数组形成一个字符串?

  23. 23

    检查一个字符串是否在另一个字符串中的任何字符的最佳方法javascript

  24. 24

    检查一个字符串是否在另一个字符串中的任何字符的最佳方法javascript

  25. 25

    如何检查字符串中的第一个字母是数字

  26. 26

    如果仅在多行字符串中仅作为第一个和最后一个字符出现,如何替换双引号?

  27. 27

    如何在Rust中删除字符串的第一个和最后一个字符?

  28. 28

    如何从爆炸的PHP字符串中删除第一个和最后一个字符

  29. 29

    如何获取字符串中第一个和最后一个字符的索引?

热门标签

归档