2016-01-21 111 views
0

给定一个字符串,如果有两个相邻的'a'它变成'a'并且如果有一个'b''b'变成"bb"。例如,"aabbaaa" - >"abbbbaa"字符串替换更好的方法

我正在考虑要么做。

  1. 使用字符串生成器,并添加时,如果使用字符串生成器str[i] == str[i+1] and str[i] =='a'。这看起来很琐碎的问题。

  2. 或者,根据上述条件,将字符串的大小设置为字符串大小的两倍(基于字符串中所有字符均为'b'的情况)并继续分配。

是吗?或者它可以更有效地完成?

+0

有'java.util.regex.Pattern.compile( “(?:A(A))|(二)”)。匹配( “aabbaaa”)的replaceAll(” $ 1 $ 2 $ 2“)' - 选择语言标签(如果适用)。 – greybeard

回答

0

是的,字符串生成器是更好的选择,但是您所描述的算法需要一些工作。

而不是你有什么,我建议是这样的。首先,有一个布尔变量,表示是否跳过前一个字母。称之为... skippedLast,并将其初始化为false。然后,在遍历每个点i处的字符串的同时:

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

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

(当然,如果你在Java和寻找“最短码”,简单地做.replace("aa", "a").replace("b", "bb")应该工作)

+0

确实,你是对的!让我修复... –

+0

随着SB我认为这个问题是微不足道的,并没有通过思考。与skippedlast的好主意。 – Kar

0

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

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