问题1、给定一个字符串str, 返回str的统计字符串,
例如: “aaabbadddffc”的统计字符串为“a_3_b_2_a_1_d_3_f_2_c_1”
进阶题目:
给定一个统计字符串cstr, 在给定一个整数inde 返回代表的字符
问题2、例如: "a_1_b_100" index=50的字符是’b‘
问题1思路:
str为空,则统计字符串不存在
str不为空,首先生成String类型res,表示统计字符串,num表示数量(初始位置:str[0], nim=1)
不停的遍历 就是看看 str[i]跟str[i-1]的关系 等于num++ 不等于则 res=res+"_"+num+"_"+str[i](把当前的加入哈) 然后num=1 继续遍历~~~~~
写入num的条件是发现新字符时候,此时一定要注意!!! 当遍历结束时候!
package TT; public class Test3 { public static String getCountString(String str){ if(str==null || str.equals("")){ return ""; } char[] chs = str.toCharArray(); String res= String.valueOf(chs[0]); int num=1; for(int i =1; i<chs.length; i++){ if(chs[i]!=chs[i-1]){ res = concat(res, String.valueOf(num), String.valueOf(chs[i])); num=1; }else{ num++; } } return concat(res, String.valueOf(num),""); } public static String concat(String s1, String s2, String s3){ return s1+"_"+s2+(s3.equals("")?s3:"_"+s3); } public static void main(String[] args) { String str = "aaabbadddffc"; String s = getCountString(str); System.out.println(s); } }
结果:
问题2
解题过程
1 boolean stage 控制进入哪个状态 true代表字符阶段 false代表遇到连续字符统计阶段 初始时候 stage=true cur=0 num=0 sum=0
比较sum跟index的关系
上代码:
package TT; public class Test3 { public static char getCharAt(String cstr, int index){ if(cstr ==null || cstr.equals("")){ return 0; } char[] chs=cstr.toCharArray(); boolean stage = true; char cur = 0; int num = 0; int sum=0; for(int i =0; i!=chs.length; i++){ if(chs[i]==‘_‘){ stage =!stage; }else if(stage){ sum +=num; if(sum > index){ return cur; } num =0; cur = chs[i]; }else{ num = num*10+chs[i]-‘0‘; } } return sum+num>index?cur:0; } public static void main(String[] args){ String cstr ="a_1_b_100"; int index = 50; char a = getCharAt(cstr, index); System.out.println(a); } }
结果:
时间: 2024-11-08 17:23:48