2016-01-21 114 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' 
相關問題