在压缩字符串中找到特定索引处的字符的最佳方法

3
我知道我们可以通过以下方式来实现:
  1. 使用StringBuilder
  2. 使用substring函数
但是我正在寻找一种方法,其中有一个压缩的字符串,例如 a5b4c2,它表示字符 a 出现了 5 次,字符 b 出现了 4 次等等,所以实际上该字符串应该是 aaaaabbbbcc
因此,索引为 2 的字符应该返回 a,索引为 6 的字符应该返回 b。
什么是最佳的解压缩字符串的方法?
我的问题更多是关于什么是最佳的解压缩字符串的方法?

如果你的问题不是关于查找特定索引处的字符,那么实话说它太模糊了,无法清楚地回答...不清楚你在寻找什么样的答案。 - Jon Skeet
@JonSkeet 他想要最好的方法。;) - Peter Lawrey
@JonSkeet:我更关注解压字符串的方法。感谢您指出有关问题明确性的要点,我已经更新了它。 - Umesh Awasthi
说实话,还不太清楚。你是在寻找不同的类,还是要从压缩的字符串表示开始,还是其他什么? - Jon Skeet
2个回答

2
我的问题更多地涉及如何处理这个压缩的字符串,而不是找到特定索引处的字符。
解压缩字符串直到您获得要了解的索引。或者您可以解压整个字符串并缓存它。
对于这个问题,最好的方法是您能想到的最简单的方法,没有更具体的要求。
我会依次解析每对字母和数字,将该数字减少索引,并且如果剩余索引小于0,则您已找到所需的字母。

我的问题更多是关于解压字符串?最好的方法是什么?我已经更新了问题。 - Umesh Awasthi
@UmeshAwasthi 最好的方法是你能想到的最简单和最明显的方式。 - Peter Lawrey
我同意你关于解析和添加数字的最简单方法+1。 - Umesh Awasthi

0

检查您要搜索的索引,然后开始累加字符数。每次添加时,请检查索引是否落在先前间隔和当前间隔之内。如果是,则找到了您的字符,否则请再次添加。

例如,如果您想要索引7处的字符,给定字符串a5b4c2的工作流程可能如下:

   current position: 0
   index we are looking for: 7
   add first character's count: 0+5 = 5
   does 7 fall within 0 and 5? no, add again
   current position: 5
   add second character's count: 5+4 = 9
   does 7 fall within 5 and 9? yes, so our character must be 'b'.

我不确定这种方法是否比解压字符串并仅使用 charAt() 更有效或更快,它只是一种不同的方法。

编辑:由于问题更多地涉及如何解压缩字符串,您可以使用 StringBuilder 并使用 for 循环将正确数量的字符附加到您的字符串中... 对我来说听起来是最简单的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接