題目我就不多說什麼了,橡皮泥,一串橡皮泥哦。
非黑即白。
小明可以採取以下方法0或多次:
從某一處切割,讓切割處左右佇列內兩條橡皮泥整個發生反轉,再拼接到一起。
輸入:橡皮泥佇列
輸出:最長的黑白相間的橡皮泥長度
樣例輸入:
bwbwb
樣例輸出:
分析:從某一處截斷之後,兩邊同時反轉,相當於如果把每個橡皮泥比作乙個球,放在乙個環裡,從某一處截斷後,倒置環,球又滾到一起拼接起來,我還特意畫了個圖演示。
不知道讀者看懂了沒,反正我是看懂了,那我們接著往下講。
就圖上這個圓圈來說,我們來推導乙個極端的情況,就是圈內所有的球球都填滿了。這時候會發生什麼呢?我覺得玩過這種玩具的熊孩子都應該知道,那就是——
無論你怎麼插,怎麼動,她都不會有一點反應。這就對了。
這是極端情況,代表的是,如果這個bw串首尾相接,那麼就算小明插∞次,整個佇列情況不會有絲毫改變,問題就變成了:
已知乙個環形由b或w組成的串,求其中最長的bw相間的子串長。問題簡單了不?
好,可能字串首尾相接在計算機中不太好表示,其實我資料結構是真的渣,所以我還得繼續簡化:
對乙個已知的環形佇列,進行上述的「分割並反轉」操作,能夠包括所有分割可能的線性佇列是什麼樣的?我們再來看圖。
圖上分別列出了三種分割後進行倒轉產生的新佇列。以此類推,所有的分割情況產生的新佇列,無非是上圖右側佇列的【乙個子佇列】
而上圖右側這個佇列,剛好是原始佇列的x2!
這樣,原問題便轉換為:
已知乙個長為x的佇列,由b或w拼接成。現求相同的兩個x佇列順序拼接後,其中長為x的順序子串行內,能出現的最長bw相間的序列長度。
源**:
1 #include 2 #include 34時間複雜度:其中乙個主要迴圈,受制引數為s.size(),所以時間複雜度為o(|s|),|s|為串長。using
namespace
std;56
int max(int a,int
b) 10
intmain()
21 ans =max(ans, j);22}
23if (s.size() / 2
26 printf("
%d\n
", ans);
27return0;
28 }
程式設計 網易2019校招筆試程式設計題
題目 小易有乙個古老的遊戲機,上面有著經典的遊戲俄羅斯方塊。因為它比較古老,所以規則和一般的俄羅斯方塊不同。熒幕上一共有 n 列,每次都會有乙個 1 x 1 的方塊隨機落下,在同一列中,後落下的方塊會疊在先前的方塊之上,當一整行方塊都被佔滿時,這一行會被消去,並得到1分。有一天,小易又開了一局遊戲,...
網易2018校招筆試程式設計題
小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩台魔法機器可以通過投入x x可以為0 個魔法幣產生更多的魔法幣。魔法機器1 如果投入x個魔法幣,魔法機器會將其變為2x 1個魔法幣 魔法機器2 如果投入x個魔法幣,魔法機器會將其變為2x 2個魔法幣...
網易校招程式設計題
define crt secure no warnings 1 include include include includeusing namespace std 小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩台魔法機器可以通過投入x x可以...