Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Задача на сжатие строки (https://javascript.ru/forum/dom-window/78456-zadacha-na-szhatie-stroki.html)

gsdev99 17.09.2019 08:23

Задача на сжатие строки
 
Всем привет. Поделитесь своими идеями решения вот этой задачи:
// Дана строка, состоящая из букв A-Z:
// AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb
// Нужно написать функцию RLE, которая на выходе даст строку вида:
// A4B3C2XYZD4E3F3A6B28b3
function rle(str) {
  // your code
}

laimas 17.09.2019 09:19

Циклом обойти строку сравнивая символ с последующим, если равны увеличивать счетчик одинаковых, если нет, запоминать символ в результате со счетчиком.

var s = 'AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb';
// A4B3C2XYZD4E3F3A6B28b3

function rle(s) {
    for(var i=0, a = 0, b = ''; i <= s.length; ++i) {
        if(s.charAt(i) == s.charAt(i+1)) a++;
        else {
            b += s.charAt(i) + (a ? a + 1 : '');
            a = 0;
        } 
    }
    return b;
}

alert(rle(s))

Alexandroppolus 17.09.2019 10:08

var str = 'AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb';

function rle(s) {
  return s.replace(/(.)\1*/g, function (m, c) { return c + (m.length > 1 ? m.length : ''); });
}

alert(rle(str))

рони 17.09.2019 10:09

gsdev99,
var s = 'AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb';
// A4B3C2XYZD4E3F3A6B28b3

function rle(s) {

    return s.replace(/(.)\1+/g, function(a, c) {
    return c + a.length
});
}

alert(rle(s))

Alexandroppolus 17.09.2019 10:15

рони,
я долго тупил, не мог понять, куда у тебя единицы деваются, не сразу заметил что плюсик вместо *
:)

laimas 17.09.2019 10:20

А мне кажется, что это очередной "студент" с задачкой на применение стандартного, а не красивого. Хотя бог его знает.

gsdev99 17.09.2019 10:45

Это "очередной студент" в поисках применения красивого )) Ребята, всем спасибо )

laimas 17.09.2019 11:02

Значит не похоже на задачу, от которой сквозит простотой. Даже подумалось, что тернарный оператор и тот лишний будет, а рег. выражения тем более.


Часовой пояс GMT +3, время: 15:30.