"Coding Interview Guide" -- 字符串的统计字符串

题目

  给定一个字符串str,返回str的统计字符串

  例如,"aaabbadddffc"的统计字符串为"a_3_b_2_a_1_d_3_f_2_c_1"

 1 public String count(String str)
 2 {
 3     if(str == null || str.equals(""))
 4     {
 5         return "";
 6     }
 7 
 8     char[] chas = str.toCharArray();
 9     String cstr = String.valueOf(chas[0]);
10     int num = 1;
11     for(int i = 1; i < chas.length; i++)
12     {
13         if(chas[i] != chas[i - 1])
14         {
15             cstr = concat(cstr, String.valueOf(num), String.valueOf(chas[i]));
16             num = 1;
17         }
18         else
19         {
20             num++;
21         }
22     }
23         
24     return concat(cstr, String.valueOf(num), "");
25 }
26 
27 
28 public String concat(String s1, String s2, String s3)
29 {
30     return s1 + "_" + s2 + (s3.equals("") ? s3 : "_" + s3);
31 }            

题目

  给定一个字符串的统计字符串cstr,再给定一个整数index,返回cstr所代表的原始字符串上的第index个字符

  例如,"a_1_b_100"所代表的原始字符串上第0个字符是'a',第50个字符是'b'

 1 public char getCharAt(String str, int index)
 2 {
 3     if(str == null || str.equals("") || index < 0)
 4     {
 5         return 0;
 6     }
 7 
 8     char[] chas = str.toCharArray();
 9     boolean stage = true;
10     char cur = 0;
11     int sum = 0;
12     int num = 0;
13     for(int i = 0; i < chas.length; i++)
14     {
15         if(chas[i] == '_')
16         {
17             stage = !stage;
18         }
19         else if(stage)
20         {
21             sum += num;
22             if(sum > index)
23             {
24                 return cur;
25             }
26             num = 0;
27             cur = chas[i];
28         }
29         else
30         {
31             num = num * 10 + chas[i] - '0';
32         }
33     }
34     return sum + num > index ? cur : 0;
35 }
36 
37     

来源:左程云老师《程序员代码面试指南》

原文地址:https://www.cnblogs.com/OoycyoO/p/10943819.html