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()
で最も長い値を検索します.重複値を検索し、その値を使用しようとする配列の長さは似ています.
その後の過程で処理された違いがあるようです.
Reference
この問題について(Algorithm) Codekata_Day 3), 我々は、より多くの情報をここで見つけました https://velog.io/@sstaar91/Algorithm-CodekataDay-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol