当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~
在此感谢左大神让我对算法有了新的感悟认识!
原问题
给定一个字符串str, 将字符串转换成统计字符串后返回
如:aaabbccc
结果为 a_3_b_2_c_3
进阶问题
给定一个字符串的统计字符串和一个index整数,统计字符串的原字符串的第index个字符是什么
如:
str = a_3_b_2_c_3
index = 1时,返回a
index = 3 是,返回b
原问题:
1、申请一个动态字符串res
2、统计每一个相同字符的子串并拼接到res即可
进阶问题
1、跳跃遍历每一个字符串的统计数字字符,累加统计数字字符,找到累加和第一次大于index的地方停止,答案就是当前位置-2
原问题:
/*** 二轮测试: 统计字符串* @return*/public static String countStrCp1(String str) {if (str == null || str.length() == 0) {return null;}char[] chars = str.toCharArray();char cur = chars[0];int count = 0;String res = Constants.EMPTY_STR;for (int i = 0; i < chars.length;) {while (i < chars.length && chars[i] == cur) {count++;i++;}res += cur + "_" + count;if (i == chars.length) {break;}else {res += "_";cur = chars[i];count = 0;}}return res;}
进阶问题
/*** 从统计字符串中获取指定位置的字符* @param countStr* @return*/public static char getCharFromCountStr(String countStr, int index) {if (countStr == null || countStr.length() == 0 || index < 0) {return 0;}int count = 0;char[] chars = countStr.toCharArray();for (int i = 2; i < chars.length; i+=4) {count += chars[i] - '0';if (index < count) {// 说明在这个之内return chars[i-2];}}return 0;}/*** 测试用例* @param args*/public static void main(String[] args) {System.out.println(getCharFromCountStr("a_3_b_2_c_3", 1));}
正在学习中
正在学习中
很简单的一道题,统计字符串可以用于压缩字符串节省空间使用,如果业务场景存在当前这种情况时可以使用该算法解决问题~
方案和代码仅提供学习和思考使用,切勿随意滥用!如有错误和不合理的地方,务必批评指正~
如果需要git源码可邮件给2260755767@qq.com
再次感谢左大神对我算法的指点迷津!