给定一个字符串,如果有两个'a'
相邻'a'
,如果有一个'b'
,则将'b'
转换为"bb"
。例如,"aabbaaa"
- > "abbbbaa"
我正在考虑要么做。
使用字符串构建器并在str[i] == str[i+1] and str[i] =='a'
时附加。如果使用字符串构建器,这似乎是非常简单的问题。
或者,取一个字符串大小两倍的字符数组(基于字符串中所有字符都是'b'
的情况)并根据上述条件继续分配。
答案 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'