0

この方法で文字列を圧縮する必要がある状況があります。

"AAABBBCCCDDD" => "A3B3C3D3", or
"ABBCCCDDDDEEEEE" => "A1B2C3D4E5", or
"FOOFOO" => "F1O2F1O2", this one is the one I can't solve

私はJavaScriptでこれを行っていますが、これまでのところ私はこれを思いつきました:

function in_array(key, array) {
    for(var x in array) {
        if(array[x] == key) {
            return true;
        }
    }

    return false;
}

function compress(str) {
    var str_splitted = str.split('');
    var new_strings = [];

    for(var x in str_splitted) {
        if(!in_array(str_splitted[x], new_strings)) {
            new_strings.push( str_splitted[x] );
            new_strings.push( (str.split(str_splitted[x]).length - 1) );
        }
    }

    return new_strings.join('');
}

したがって、私のコード スニペットでは、2 つの例は問題なく動作しますが、3 つ目の例では、一致したすべての文字がカウントされるため、出力は次のようになります。

"FOOFOO" => "F2O3", and not "F1O2F1O2"

この問題に対するヘルプ、ヒント、アドバイス、および/またはより良い解決策が本当に必要です。これを手伝ってくれたすべての人に感謝します!

4

3 に答える 3

1
function compress(str){
    var result = '',
        current = '',
        count = 0;
    for(var i = 0; i <= str.length; i++)
        if(i < str.length){
            if(str[i] !== current){
                if(current){
                    result += current + count.toString();
                    count = 0;
                }
                current = str[i];
            }
            count++;
        } else
            result += current + count.toString();
    return result;
}
于 2013-06-11T07:00:57.213 に答える