Algorithm) Codekata_Day 3


❓ Question


Stringパラメータで重複しないアルファベットからなる最長単語の長さを返します.

📝 My Solution


文字列を新しい配列に繰り返し文で挿入します.
重複が発生した場合、splice関数によりこれまでの配列を切り取ります.
配列の長さを名前の変数に入れます.
変数と比較して、最も数値の高い変数の値を出力します.
const getLengthOfStr = str => {				
  const arr = [];
  let mostLength = 0;
  let presentLength = 0;

  for (let i = 0; i<str.length; i++) {
    if (arr.indexOf(str[i]) === -1) {
        arr.push(str[i])
    } else if (arr.indexOf(str[i]) !== -1) {
        presentLength = arr.splice(0,arr.indexOf(str[i])).length
        if (mostLength >= presentLength) {
          presentLength = 0
        } else {
          mostLength = presentLength
        }
        arr.push(str[i])
      }
  }
  if (mostLength >= arr.length) {
    return mostLength
  } else {
    return arr.length
  }
}

▪️ Solution review


出力配列ではなく、最長の単語の長さを返します.
数字を比較して長さを測った.
ただし、文字列(abcdefghijcklmnop)を入力すると
cは繰返し値なので、この文字列が発生するとエラーが表示されます.

📝 Another Solution

const getLengthOfStr = str => {
  let arr = [];
  let newTxt = "";
  if(str.length === 0) {
    return 0;
  }
  for (let i in str) {
    if(newTxt.includes(str[i])){
      newTxt = newTxt.slice(newTxt.indexOf(str[i]) + 1);
    }
    newTxt = newTxt + str[i];
    arry.push(newTxt.length);
  }
  return Math.max(...arr);
}

▪️ Solution review


この方法は,各配列の長さを格納することによって最大数の値を返す.arr変数とnewTxt変数をそれぞれ設定します.includes関数を使用して、テキストに重複値がある場合
この値を前にして続行します.
配列長は毎回arryとして保存されます.
すべての運転が終了したら、Math.max()で最も長い値を検索します.
重複値を検索し、その値を使用しようとする配列の長さは似ています.
その後の過程で処理された違いがあるようです.