String 字符串替换更好的方法

String 字符串替换更好的方法,string,algorithm,replace,String,Algorithm,Replace,给定一个字符串,如果有两个相邻的'a'将其转换为'a',如果有一个'b'将'b'转换为'bb'。例如,“aabbaaa”->“abbbaa” 我想做两件事 只要str[i]==str[i+1]和str[i]==a',就可以使用字符串生成器和追加。如果使用字符串生成器,这似乎是一个很小的问题 或者,获取一个字符串大小两倍的字符数组(基于字符串中所有字符都是'b')并根据上述条件继续赋值 是这样吗?还是可以更有效地完成 是的,字符串生成器是更好的选择,但是您的算法需要做一些工作 我建议的不是你有的,

给定一个字符串,如果有两个相邻的
'a'
将其转换为
'a'
,如果有一个
'b'
'b'
转换为
'bb'
。例如,
“aabbaaa”
->
“abbbaa”

我想做两件事

  • 只要
    str[i]==str[i+1]和str[i]==a'
    ,就可以使用字符串生成器和追加。如果使用字符串生成器,这似乎是一个很小的问题

  • 或者,获取一个字符串大小两倍的字符数组(基于字符串中所有字符都是
    'b'
    )并根据上述条件继续赋值


  • 是这样吗?还是可以更有效地完成

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

    我建议的不是你有的,而是这个。首先,使用一个布尔变量说明是否跳过了前一个字母。叫它<代码>跳过最后一个,并将其初始化为
    false
    。然后,在每个点i迭代字符串时:

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

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


    (当然,如果您在java中寻找“最短代码”,只需执行
    。替换(“aa”、“a”)。替换(“b”、“bb”)
    就可以了)

    您可以使用regex。如果已安装perl:

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

    java.util.regex.Pattern.compile((?:a(a))|(b)”).matcher(“aabbaaa”).replaceAll($1$2$2”)
    -如果合适的话,选择语言标记。对于SB,我认为问题微不足道,没有仔细考虑。好主意,跳过最后一个。