グループ単語checker-javascript


質問(ソース)


https://www.acmicpc.net/problem/1316

私の接近


  • まずindexOfで各単語のスペルが現在のスペルの後にあるかどうかをチェックします.

  • ある場合は、現在のindex以降が正しいかどうかを確認します.そうでなければbreakで組み合わせ語ではないことを認識します.
  • に答える


    私の答え

    const fs = require("fs");
    const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
    let input = fs.readFileSync(filePath).toString().split('\n');
    
    
    let result = 0;
    for (let i = 1; i <= input[0]; i++){
        let a = input[i].split('');
        for (let j = 0; j < a.length; j++){
            if (a.indexOf(a[j], j + 1) === -1){
                if(a.length - 1 === j){ // a의 마지막 글자라면
                    result++;
                }
                continue;
            }else if(a.indexOf(a[j], j + 1) === j + 1){
                continue;
            }else{
                break;
            }
        }
    }
    console.log(result);

    模範解答

    var N = parseInt(input.shift());
    var count = 0;
    
    function solution(str){
      var record = [];
      for(var i = 0, length = str.length; i < length; i++){
        if(record.indexOf(str[i]) === -1){
          record.push(str[i]);
        } else {
          if(record[record.length -1] !== str[i]){
            return;
          }
        }
      }
      count++;
    }
    
    for(var i = 0; i < N; i++){
      solution(input[i])
    }
    
    console.log(count);

    今日の勉強と教訓


  • 実は私はこのような問題を何度も見たことがあるようです.毎回難しく考えて、問題を解いているようです.

  • 最良の答えでは、確かに私が解いたより簡単なアルゴリズムですべての状況の数を決定することができます.

  • 似たような問題がたくさんあるように、この方法は理解して覚えなければならない.