кодировка длины выполнения Java

Я не знаю, с чего начать.

Мы должны сделать программу кодирования Run-length,

например, пользователи вводят эту строку:

aaaaPPPrrrrr

заменяется на

4a3P5r

Может ли кто-нибудь помочь мне начать с этим?

 Hot Licks05 окт. 2012 г., 18:39
Забудьте о Java. Просто сядьте и подумайте о процессе, который вы бы использовали, и запишите его на английском (или на любом другом разговорном языке, который вы предпочитаете). & Quot; Выполнить & Quot; эту последовательность, используя несколько разных (и разнообразных) примеров, и, когда вы почувствуете, что у вас все в порядке, транслитерируйте на Java.
 Shawn12 июл. 2012 г., 00:34
ты можешь помочь мне с кодированием? как с петлями
 Pshemo12 июл. 2012 г., 00:03
What have you tried? Что вы не знаете / не понимаете?

Ответы на вопрос(5)

Надеюсь, это поможет вам начать работу:

Фундаментальная идея, лежащая в основе кодирования длин серий, состоит в том, что последовательно встречающиеся токены, такие как aaaa, могут быть заменены более короткой формой 4a (означающей «следующие четыре символа являются« a »). Этот тип кодирования использовался в первые дни компьютерной графики для экономии места при хранении изображения. Тогда видеокарты поддерживали небольшое количество цветов, и изображения обычно имели один и тот же цвет подряд для значительных частей изображения)

Вы можете прочитать об этом подробно в Википедии

http://en.wikipedia.org/wiki/Run-length_encoding

Для того, чтобы кодировать длину строки, вы можете перебирать символы во входной строке. Есть счетчик, который подсчитывает, сколько раз вы видели одного и того же персонажа подряд. Когда вы видите другого персонажа, выведите значение счетчика, а затем символ, который вы рассчитывали. Если значение счетчика равно 1 (то есть вы видели только один из этих символов в строке), пропустите вывод счетчика.

 Shawn12 июл. 2012 г., 00:34
некоторые вещи на продвинутом уровне. Я еще многому не научился.
 12 июл. 2012 г., 01:49
Попробуйте реализовать код, который я описал в последнем абзаце. Если у вас есть лучший код, который вы можете придумать, опубликуйте его как новый вопрос и объясните, на чем вы застряли. Ссылка на этот вопрос в вашем новом вопросе.
public String runLengthEncoding(String text) {
    String encodedString = "";

    for (int i = 0, count = 1; i < text.length(); i++) {
        if (i + 1 < text.length() && text.charAt(i) == text.charAt(i + 1))
            count++;
        else {
            encodedString = encodedString.concat(Integer.toString(count))
                    .concat(Character.toString(text.charAt(i)));
            count = 1;
        }
    }
    return encodedString;
}

Попробуйте это.

Это можно легко и просто сделать с помощью StringBuilder и нескольких вспомогательных переменных, чтобы отслеживать количество каждой буквы, которую вы видели. Тогда просто строить, как вы идете.

Например:

static String encode(String s) {
    StringBuilder sb = new StringBuilder();
    char[] word = s.toCharArray();
    char current = word[0]; // We initialize to compare vs. first letter

           // our helper variables
    int index = 0; // tracks how far along we are
    int count = 0; // how many of the same letter we've seen

    for (char c : word) {
        if (c == current) {
            count++;
            index++;

            if (index == word.length)
                sb.append(current + Integer.toString(count));
        }

        else {
            sb.append(current + Integer.toString(count));
            count = 1;
            current = c;
            index++;
        }
    }
    return sb.toString();
}

Поскольку это, безусловно, домашнее задание, я призываю вас изучить подход, а не просто использовать ответ в качестве решения вашей домашней работы. StringBuilders очень полезны для создания вещей по ходу работы, таким образом, сохраняя время выполнения O (n) во многих случаях. Здесь используется пара вспомогательных переменных для отслеживания того, где мы находимся в итерации & quot; index & quot; и другой, чтобы вести подсчет того, сколько из конкретной буквы, которую мы видели, «считать», мы сохраняем всю необходимую информацию для построения нашей закодированной строки по ходу работы.

Например, если входной строкой является & # x201C; wwwwaaadexxxxxx & # x201D ;,              тогда функция должна вернуть & # x201C; w4a3d1e1x6 & # x201D ;.

Исходный код (Java): -

package com.algo.runlengthencoding;


public class RunlengthEncoding 
{

    // For example, if the input string is “wwwwaaadexxxxxx”,
    // then the function should return “w4a3d1e1x6”.

    public static void main(String args[]) {

        String str = "aaaabbbccdddddddeeffffff";

        String value = getRunLengthEncodingForGivenString(str);
        System.out.println(value);
    }

    public static String getRunLengthEncodingForGivenString(String str) {
        String value = "", compare = "";

        for (int i = 0; i < str.length(); i++) {
            CharSequence seq = str.charAt(i) + "";

            if (compare.contains(seq))
                continue;

            compare = compare + str.charAt(i);

            int count = 0;
            for (int j = 0; j < str.length(); j++) {
                if (str.charAt(i) ==, str.charAt(j))
                    count = count + 1;
            }

            value = value + str.charAt(i) + Integer.toString(count);
        }
        return value;
    }

}
import java.util.Scanner;
/**
 * @author jyotiv
 *
 */
 public class RunLengthEncoding {
 /**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Enter line to encode:");
    Scanner s=new Scanner(System.in);
    String input=s.nextLine();
            int len = input.length();
            int i = 0;
            int noOfOccurencesForEachChar = 0;
            char storeChar = input.charAt(0);

            String outputString = "";
            for(;i<len;i++)
            {
                if(i+1<len)
                {
                    if(input.charAt(i) == input.charAt(i+1))
                    {
                        noOfOccurencesForEachChar++;
                    }
                    else
                    {
                        outputString = outputString + 
   Integer.toHexString(noOfOccurencesForEachChar+1) + storeChar;
                        noOfOccurencesForEachChar = 0;
                        storeChar = input.charAt(i+1);
                    }
                }
                else
                {
                    outputString = outputString + 
 Integer.toHexString(noOfOccurencesForEachChar+1) + storeChar;
                }
            }

            System.out.println("Encoded line is: " + outputString);   

        }

}

Я попробовал это. Это будет работать наверняка.

Ваш ответ на вопрос