javarle升级算法
例如,如果我有如下输入: 嗨,嗨,嗨,嗨 输出必须是: H9e3e2l5o 这是我到目前为止编写的代码:javarle升级算法,java,url-encoding,Java,Url Encoding,例如,如果我有如下输入: 嗨,嗨,嗨,嗨 输出必须是: H9e3e2l5o 这是我到目前为止编写的代码: public class RLE { public static String encode(String s) { if (s == "" || s == null) return ""; StringBuilder sb = new StringBuilder(); int count = 1
public class RLE {
public static String encode(String s) {
if (s == "" || s == null) return "";
StringBuilder sb = new StringBuilder();
int count = 1;
char previous = s.charAt(0);
char current;
for (int i = 1; i < s.length(); i++) {
current = s.charAt(i);
if (current == previous) {
count++;
} else {
if (count == 1) {
sb.append(previous);
} else if (count > 1) {
sb.append(count).append(previous);
count = 1;
}
}
previous = current;
}
return sb.toString();
}
公共类RLE{
公共静态字符串编码(字符串s){
如果(s==“”| | s==null)返回“”;
StringBuilder sb=新的StringBuilder();
整数计数=1;
char previous=s.charAt(0);
炭流;
对于(int i=1;i1){
追加(计数)追加(先前的);
计数=1;
}
}
先前=当前;
}
使某人返回字符串();
}
结果:
‘Heeeeelloooo’->H12e2l
代码丢失了
if (count > 1) {
sb.append(count);
}
sb.append(previous)
在for循环之后。您缺少字符串的最后一个字符等于前一个字符的大小写,则该字符不打印。在if(current==previous)大小写中也添加增量逻辑
if (current == previous) {
count++;
if(i == s.length()-1){
if (count == 1) {
sb.append(previous);
} else if (count > 1) {
sb.append(count).append(previous);
count = 1;
}
}
}
这对你有用
public static String encode(String s) {
if (s == "" || s == null)
return "";
StringBuilder sb = new StringBuilder();
int count = 1;
char previous = s.charAt(0);
char current;
for (int i = 1; i < s.length(); i++) {
current = s.charAt(i);
if (current == previous) {
count++;
} else {
if (count == 1) {
sb.append(previous);
} else if (count > 1) {
if (count > 9) {
sb.append(9).append(previous);
sb.append(count - 9).append(previous);
} else {
sb.append(count).append(previous);
}
count = 1;
}
}
previous = current;
}
sb.append(count).append(previous);
return sb.toString();
}
公共静态字符串编码(字符串s){
如果(s==“”| | s==null)
返回“”;
StringBuilder sb=新的StringBuilder();
整数计数=1;
char previous=s.charAt(0);
炭流;
对于(int i=1;i1){
如果(计数>9){
附加(先前的);
某人追加(计数-9)。追加(先前);
}否则{
追加(计数)追加(先前的);
}
计数=1;
}
}
先前=当前;
}
追加(计数)追加(先前的);
使某人返回字符串();
}
您的问题是什么?我知道您的代码没有提供预期的输出。但我不明白的是,您的Hello应该导致H9e3e…(您的第一个示例是将12分解为9+3…但是…为什么?为什么是9+3?