字符串替换更好的方法

时间:2016-01-21 01:32:12

标签: string algorithm replace

给定一个字符串,如果有两个'a'相邻'a',如果有一个'b',则将'b'转换为"bb"。例如,"aabbaaa" - > "abbbbaa"

我正在考虑要么做。

  1. 使用字符串构建器并在str[i] == str[i+1] and str[i] =='a'时附加。如果使用字符串构建器,这似乎是非常简单的问题。

  2. 或者,取一个字符串大小两倍的字符数组(基于字符串中所有字符都是'b'的情况)并根据上述条件继续分配。

  3. 是吗?还是可以更有效率地完成?

2 个答案:

答案 0 :(得分:0)

是的,字符串构建器是更好的选择,但您概述的算法需要一些工作。

而不是你所拥有的,我建议的是这一点。首先,有一个布尔变量,说明你是否跳过了前一个字母。将其命名为IFileOperation::PerformOperations(),并将其初始化为skippedLast。然后,在每个点迭代字符串i:

如果false,请将((i > 0) && (! skippedLast) && (str[i-1] == 'a') && (str[i] == 'a'))设置为skippedLast。否则,将true设置为skippedLast并将false添加到输出中。

如果str[i],则再次将str[i] == 'b'添加到输出中。

(当然,如果你在java中寻找"最短的代码",只需要str[i]就可以了)

答案 1 :(得分:0)

你可以使用正则表达式。如果您安装了perl:

echo aabbaaa | perl -ne '$_ =~ s/aa/a/g; $_ =~ s/b/bb/g; print'