Java RLE升级算法
Java RLE upgrade algorithm
例如,如果我有这样的输入:
Heeeeeeeeeeeellooooo
输出必须是:
H9e3e2l5o
这是我到目前为止编写的代码:
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();
}
结果:
'Heeeeeeeeeeeellooooo' -> H12e2l
代码丢失
if (count > 1) {
sb.append(count);
}
sb.append(previous)
for 循环后。
您忽略了字符串的最后一个字符等于前一个字符的情况,即不打印。在 if(current == previous) case also
中添加增量逻辑
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();
}
例如,如果我有这样的输入:
Heeeeeeeeeeeellooooo
输出必须是:
H9e3e2l5o
这是我到目前为止编写的代码:
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();
}
结果:
'Heeeeeeeeeeeellooooo' -> H12e2l
代码丢失
if (count > 1) {
sb.append(count);
}
sb.append(previous)
for 循环后。
您忽略了字符串的最后一个字符等于前一个字符的情况,即不打印。在 if(current == previous) case also
中添加增量逻辑 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();
}