点击关注公众号,干货第一时间送达

也是一道字符串类型的题目,
但是,
小编在力扣上,没有找到对应的原题
各位吴彦祖和刘亦菲或是能够找到,
可以私信告诉小编。
OK,一起来看看这道题。
一、屏幕前的吴彦祖和刘亦菲们,请听题

统计字符串是什么样?
举个例子:

其实,这个统计字符串,做起来不难。
遍历的时候记录累加即可。
可是,这个题目有个扩展:

比如:

这个扩展求解起来,有点点需要注意字符的变化。
遍历过程中,会遇到 '_' 或者 数字 '1' 等。
二、解题
题意不是很难,只是coding的时候注意下细节即可。
直接看看原题和扩展的代码吧。
原题完整代码:
public class CodingDemo {
/**
* TODO: 字符串中的统计字符串
* @param str
* @return
*/
private static String getCountingStr(String str){
if (str == null || str.length() == 0){
return "";
}
char[] ch = str.toCharArray();
String res = String.valueOf(ch[0]);
int num = 1;
for (int i = 1; i < ch.length; i++) {
if (ch[i] != ch[i-1]){
res = concatStr(res, String.valueOf(num), String.valueOf(ch[i]));
num = 1;
} else {
num++;
}
}
return concatStr(res, String.valueOf(num), "");
}
private static String concatStr(String res, String num, String next){
return res + "_" + num + (next.equals("") ? next : "_" + next);
}
public static void main(String[] args) {
String str = "aaabbadddffc";
System.out.println(getCountingStr(str));
}
}
输出:
D:\java\bin\java.exe
a_3_b_2_a_1_d_3_f_2_c_1
扩展完整代码:
public class CodingDemo {
/**
* TODO; 统计字符串指定坐标的字符
* @param str
* @param index
* @return
*/
private static char getCharAt(String str, int index){
if (str == null || str.length() == 0){
return 0;
}
char[] ch = str.toCharArray();
boolean stage = true; //true 遇到字符串,false 遇到连续字符串
int sum = 0;
int num = 0;
char cur = 0;
for (int i = 0; i < ch.length; i++) {
if (ch[i] == '_'){
//要么是 a_
//要么是 100_b
stage = !stage;
} else if (stage){
//阶段切换,统计上一个字符出现的次数,判断是否在index 中
sum += num;
if (sum > index){
return cur;
}
cur = ch[i];
num = 0;
} else {
num = num*10 + (ch[i] - '0');
}
}
return sum+num > index ? cur : '0';
}
public static void main(String[] args) {
String str = "a_3_b_2_a_1_d_3_f_2_c_1";
System.out.println(getCharAt(str, 6));
}
}
输出:
D:\java\bin\java.exe
d

文章转载自皮皮克克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




