Задача на сжатие строки
Всем привет. Поделитесь своими идеями решения вот этой задачи:
// Дана строка, состоящая из букв 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, время: 15:30. |