Задача на сжатие строки
Всем привет. Поделитесь своими идеями решения вот этой задачи:
// Дана строка, состоящая из букв A-Z:
// AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb
// Нужно написать функцию RLE, которая на выходе даст строку вида:
// A4B3C2XYZD4E3F3A6B28b3
function rle(str) {
// your code
}
|
Циклом обойти строку сравнивая символ с последующим, если равны увеличивать счетчик одинаковых, если нет, запоминать символ в результате со счетчиком.
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))
|
var str = 'AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb';
function rle(s) {
return s.replace(/(.)\1*/g, function (m, c) { return c + (m.length > 1 ? m.length : ''); });
}
alert(rle(str))
|
gsdev99,
var s = 'AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBbbb';
// A4B3C2XYZD4E3F3A6B28b3
function rle(s) {
return s.replace(/(.)\1+/g, function(a, c) {
return c + a.length
});
}
alert(rle(s))
|
рони,
я долго тупил, не мог понять, куда у тебя единицы деваются, не сразу заметил что плюсик вместо * :) |
А мне кажется, что это очередной "студент" с задачкой на применение стандартного, а не красивого. Хотя бог его знает.
|
Это "очередной студент" в поисках применения красивого )) Ребята, всем спасибо )
|
Значит не похоже на задачу, от которой сквозит простотой. Даже подумалось, что тернарный оператор и тот лишний будет, а рег. выражения тем более.
|
| Часовой пояс GMT +3, время: 08:16. |