[Code Kata] JavaScript #3



  • 質問する
    *String型str因子の中で重複しないアルファベットからなる最長単語の長さを返してください.
    x)str="sttrg"->return 3(trg)、str="abcabcbc"->returnは3(abc)

  • 問題解決の方法を想定する
    1)パラメータとして受信した文字の前の文字を空の文字列に割り当て、次の文字から始め、最初の文字が指定した文字列に含まれている場合は重複文字を終了し、含まれていない場合は文字列に結合し、空の配列に割り当てます.配列内のすべての割り当て値は、パラメータ文字列に重複文字がない文字列の組合せで埋め込まれ、配列内のすべての値の中で最も長い値を返すことを想定します.
    2)前の各文字は、後の他の文字と比較するためにダブルfor文を使用します.
    3)パラメータの値が存在しない場合,そのパラメータの挙動が正しくなく,異常処理は0を返す.
    4)重複文字がないため、最後の文字に移動した場合(i=str.length)、重複文字が発生した場合に終了するように設定します.
    5)これらの抽出文字列を含む配列では,各値の中で最も長い文字列長を返す必要がある.

  • コードの作成
  • function change(str) {
      let arr = [];							// 인자에서 중복되지 않은 문자들을 뽑은 값을 저장할 배열 선언
    
      for (let t = 0; t < str.length + 1; t++) {
        let result = "";						// 문자 중복제거용 변수 선언
    
        for (let i = t; i < str.length + 1; i++) {
          if (str == "") {						// 인자의 문자열이 "" 일때 예외처리
            return 0;
          } else if (result == "") {				
            result = str.slice(i, i + 1);				// result 가 빈값일 때 현재 탐색중인 문자 무조건 할당
          } else if (i === str.length) {				 
            arr.push(result);					// 인자의 마지막 문자 까지 탐색했을 때 현재 result 에 있는 문자열을 배열에 추가
          } else if (!result.includes(str.slice(i, i + 1))) {
            result += str.slice(i, i + 1);				// 현재 result 에 현재 탐색중인 글자가 포함되어있지 않으면 result에 해당 문자 추가
          } else {
            arr.push(result); 					// 인자로 받은 문자열의 끝까지 탐색하지 않았지만, result에 현재 탐색중인 문자가 포함 된 경우 그때의 result 값을 배열에 추가
            break;
          }
        }
      }
      let max = arr[0].length;	
      for (i = 1; i < arr.length; i++) {
        if (arr[i].length > max) {					// 배열의 각 항의 길이를 비교하여 각장 긴 배열의 길이를 max로 할당
        max = arr[i].length;
      }
      return max;
    }
    }
    

  • 作成後に認識される内容
    1)二重for文で繰り返した場合、外部for文変数を内部for文変数として指定できる初期値を決定して回転させる.