题目一:
给定一个字符串str,返回其统计字符串,
例如String s=”aaabbadddffc”;其统计字符串形式为”a_3_b_2_a_1_d_3_f_2_c_1“。
题目二:
给定一个字符串的统计字符串,再给定一个整数,返回原始字符串上该整数上的字符。
例如”a_1_b_100”,0返回‘a’,100返回‘b’
public class demo {
public static void main(String[] args) {
char res=returnChar("a_1_b_100",0);
System.out.println(res);
}
//字符串的统计字符串
public static String count(String str){
if(str==null||str.equals("")){
return str;
}
char[] chas=str.toCharArray();
String res="";
int index=0;
for(int i=0;i<chas.length;i++){
if(chas[index]!=chas[i]){
res+=String.valueOf(chas[index])+"_"+String.valueOf(i-index)+"_";
index=i;
}
}
res+=String.valueOf(chas[index])+"_"+String.valueOf(chas.length-index);
return res;
}
//给定统计字符串cstr和整数index,返回cstr原始字符串中第index个字符
public static char returnChar(String cstr,int index){
if(cstr==null||cstr.equals("")){
return 0;
}
int num=0;//当前字符个数
int sum=0;//当前总字符
boolean stage=true;//代表遇到字符阶段,反之是统计字符阶段
char cur=0;//当前字符
char[] chas=cstr.toCharArray();
for(int i=0;i<chas.length;i++){
if(chas[i]=='_'){
stage=!stage;//变阶段
}
else if(stage){//遇到下一个字符了,该计入sum了,判断是否返回值
sum+=num;
if(sum>index){
return cur;
}
num=0;
cur=chas[i];//存新字符,清num0
}
else{//统计阶段
num=num*10+(chas[i]-'0');
}
}
return sum+num>index?cur:0;//最后一次单独看
}
}
PS:
第一次独立正确完成一道题~
虽然第二题还是被解析搞得晕乎乎…