プログラマコードテスト練習<文字列中のpとyの個数>


🔎 <文字列のpとyの個数>



📝 答案用紙


今からコードテストの練習を始めて、私の恥ずかしい答えと他の人の答えを見てみましょう.

🚩 提出した答え

function solution(s) {
  var answer = true;
  if (s.match(/p/gi).length !== s.match(/y/gi).length) {
      answer = false;
  }
  return answer;
}
match()と正規表現を使用して、文字列内の正規表現が一致する部分を検索して解決しようとしましたが、テスト中に実行時エラーが発生しました.正規表現で文字列を検索するのに時間がかかるためと推測される.
また、match()に基づいて文字列を検索した場合、pyが存在しないとnullが返され、エラーが発生する.

主な使用法

match()、正規表現

🚩 他人の答え


include()の答えを使う

function solution(s){
  var answer = true;
  var pCount = 0;
  var yCount = 0;
  
  for (let i = 0; i < s.length; i++) {
    if (s.toLowerCase()[i].includes("p")) {
      pCount++;
    }
  }
  
  for (let j = 0; j < s.length; j++) {
    if (s.toLowerCase()[j].includes("y")) {
      yCount++;
    }
  }
  
  if (pCount !== yCount) {
    answer = false;
  }

  return answer;
}
includes()forの繰り返し文を使用して、文字が含まれているかどうかを検索できます.しかし、李ギョンウは大文字と小文字が区別されているため、toLowerCase()またはtoUpperCase()で統一される.

split()の答えを使う

function solution(s){
  // 함수를 완성하세요
  return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
  // 해당 문자를 기준으로 나누면, ["", "", "OOOYY"], ["PPOOO", "", ""] 로 구분된다.
}
split()でこの文字を分離して配列に戻した後、その配列の長さで検索することができる.ただし、これも大文字と小文字を区別するので、toLowerCase()またはtoUpperCase()で統一します.

📌 学習のポイント


split()


split(separator)メソッドにより、Stringオブジェクトを指定するseparatorを使用して複数の文字列に分割することができる.この場合、区切り記号を""と指定すると、各文字が分離されます.

includes()


配列に特定の要素が含まれているか否かをincludes(valueToFind[, fromIndex])で判別することができる.fromIndexが配列長を超えると、falseが返されます.
[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true

['a', 'b', 'c'].includes('c', 3);   // false
['a', 'b', 'c'].includes('c', 100); // false

match()


match()メソッドは、文字列が正規表現と一致する部分を検索します.