0

私は独学でプログラミングを学ぼうとしており、javascript から始めました。もっと学ぶために、私は練習課題を完了してきました.1つの課題は、文字の繰り返しが最も多い文字列内の単語の最初のケースを決定するスクリプトを書くことでした. 私が作成したこのコードでそれを完了することができました:

string = "Hey i believe";
string = string.split(" ");
stringarray = [];
longestlength = 0; 

for (i = 0; i < string.length; i++) {
    stringarray.push(0);
}

for (i = 0; i < string.length; i++) {
    if (string[i].length > longestlength) {
        longestlength = string[i].length;
        longestword = string[i];
    }
}

for (x = 0; x < string.length; x++) {
    y = 0;
    z = 0;
    while (z < string[x].length) {
        if (string[x].substr(z,1) == string[x].substr(y,1) && z !== y) {
            stringarray[x] += 1;
            y = string[x].length -1;
        }
        y++;
        if (y == string[x].length) {
            z++;
            y = z;
        }
    }
}

if (Math.max.apply(null,stringarray) === 0) {
    mostrptltword = -1;
}
else {
    mostrptltword = string[stringarray.indexOf(Math.max.apply(null,stringarray))];
}

console.log(mostrptltword);

しかし、チャレンジで可能なすべてのポイントを獲得するには、10 分以内に完了する必要があり、これには 25 分かかりました。だから私の質問は、私が物事を複雑にしすぎているということです。必要以上に長いスクリプトを書くことになりますか? 正規表現のようなものと、それらがスクリプトの長さを実際に短縮する方法とそれらを記述するのにかかる時間について少し読んだことがありますか、それとも、作成しなければならなかったすべてのループよりも便利な別の手法でしょうか?

4

1 に答える 1

1
var words = "Heyyyyy I believe".split(' '); // split the words into an array


var values = [],   // total of times that a letter appears
    k = 0,         // 'global' counter. I'm using this to iterate over the values array
    heigher = 0,   // holds de heigher occurrence of a letter 
    letter = "";   // the letter that most appears in that word
    word = "";     // the word


// iterate over all the words
for(var i = 0; i < words.length; i++) {  

    // iterate over each letter in each word
    for(var j = 0; j < words[i].length; j++) {

        // holds the occurrence time
        // RegEx: get the word in the position 'i' and check how many times the letter appears on the position [j] appears
        values[k] = words[i].match(new RegExp(words[i][j],'g')).length;

        // check if the next letter appears more times than the previous one
        if(values[k] > heigher) {
            // hold the values of interest
            heigher = values[k];
            letter = words[i][j];
            word = words[i];
        }
        k++;
    } 
}

console.log("word: " + word + " letter: " + letter + " total: " + heigher);

jsfiddle: http://jsfiddle.net/felipemiosso/FyCHG/

がコメントされています。それが役に立てば幸い :)

于 2013-10-30T19:57:09.020 に答える