java游程编码

我不知道如何开始我的任务。

我们制作了一个游程编码程序,

例如,用户输入此字符串:

aaaaPPPrrrrr

被替换为

4a3P5r

有人可以帮我开始吗?

希望这会让你开始你的任务:

行程编码背后的基本思想是像aaaa这样的连续出现的标记可以用更短的forms4a(意思是“以下四个字符是’a’”)代替。 这种类型的编码在计算机图形学的早期使用,以在存储图像时节省空间。 那时候,video卡支持少量颜色和图像,通常在图像的重要部分连续使用相同的颜色)

您可以在维基百科上详细阅读

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

为了对字符串进行行程编码,您可以遍历输入字符串中的字符。 有一个计数器,计算你连续看到相同字符的次数。 当您看到另一个字符时,输出计数器的值,然后输出您一直在计算的字符。 如果计数器的值为1(意味着您只看到一行中的一个字符),则跳过输出计数器。

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)。 这里使用几个辅助变量来跟踪我们在迭代“索引”中的位置,另一个用于记录我们看到的特定字母“计数”的数量,我们保留了构建编码字符串的所有必要信息,因为我们走。

 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 

我试过这个。 它肯定会起作用。

例如,如果输入字符串是“wwwwaaadexxxxxx”,则该函数应返回“w4a3d1e1x6”。

源代码(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; } }