描述
给定一个完全由数字字符(‘0’,‘1’,‘2’,…,‘9’)构成的字符串str,请写出str的p型编码串。例如:字符串122344111可被描述为"1个1、2个2、1个3、2个4、3个1",因此我们说122344111的p型编码串为1122132431;类似的道理,编码串101可以用来描述1111111111;00000000000可描述为"11个0",因此它的p型编码串即为110;100200300可描述为"1个1、2个 0、1个2、2个0、1个3、2个0",因此它的p型编码串为112012201320。
输入
输入仅一行,包含字符串str。每一行字符串最多包含1000个数字字符。
输出
输出该字符串对应的p型编码串。
样例输入
122344111
样例输出
1122132431
解法1:(利用substring()方法)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int sum=1;
String a=in.nextLine();
String c="a";//利用字符串c则循环可以直接比较
char b=a.charAt(0);
for(int i=1;i<a.length();i++){
if(a.charAt(i)==b) {
sum++;
}
else{
c=c+String.valueOf(sum)+a.charAt(i-1);
b=a.charAt(i);
sum=1;
}
}
c=c+String.valueOf(sum)+b;
System.out.println(c.substring(1));
}
}
解法2:(常规方法)
import java.util.Scanner;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int sum=1;
String a=in.nextLine();
String b[]=a.split("");
for(int i=0;i<b.length-1;i++){
if(b[i].equals(b[i+1])) {
sum++;
}
else{
System.out.print(sum);
System.out.print(b[i]);
sum=1;
}
}
System.out.print(sum);
System.out.print(b[b.length-1]);
}
}
重点:最后一个字符的处理尽量不要放在for循环内处理,否则会重复输出,特别注意当字符串的长度为1时,我开始做的时候就是没有考虑当长度为1时,然后搞得提交后只有9分。
以下代码都是处理最后字符,处理不当,当字符串的长度为1时,输出会出错。
错误时的代码1:
for(int i=1;i<a.length();i++){
if(a.charAt(i)= =b) {
sum++;
if(i==a.length()-1) {
c=c+String.valueOf(sum)+a.charAt(i);
}
}
else{
c=c+String.valueOf(sum)+a.charAt(i-1);
b=a.charAt(i);
sum=1;
if(i==a.length()-1) {
c=c+String.valueOf(sum)+a.charAt(i);
}
}
}
错误时的代码2:
for(int i=1;i<a.length();i++){
if(a.charAt(i)==b) {
sum++;
if(i==a.length()-1) {
System.out.print(sum);
System.out.print(a.charAt(i));
}
}
else{
System.out.print(sum);
System.out.print(a.charAt(i-1));
b=a.charAt(i);
sum=1;
if(i==a.length()-1) {
System.out.print(sum);
System.out.print(a.charAt(i));
}
}
}