思路:給你乙個字串 croakoffrogs,它表示不同青蛙發出的蛙鳴聲(字串 「croak」 )的組合。由於同一時間可以有多隻青蛙呱呱作響,所以 croakoffrogs 中會混合多個 「croak」 。請你返回模擬字串中所有蛙鳴所需不同青蛙的最少數目。
輸入:croakoffrogs =
"croakcroak"
輸出:1
解釋:乙隻青蛙 「呱呱」 兩次
輸入:croakoffrogs =
"crcoakroak"
輸出:2
解釋:最少需要兩隻青蛙,「呱呱」 聲用黑體標註
第一只青蛙 "crcoakroak"
第二隻青蛙 "crcoakroak"
輸入:croakoffrogs =
"croakcrook"
輸出:-
1解釋:給出的字串不是 "croak" 的有效組合。
我剛開始看這個題目以為和括號匹配是類似的,以為要用棧來解決,心想那也太複雜了吧。但是後來發現這兩種題型不一樣,因為這個不僅可以巢狀,還可以錯位。這一題有點類似於消消樂遊戲,條件滿足時消除一組,所有都消除完則證明是有效組合:
首先我們用c,r,o,a四個變數來記錄字元出現的次數
當遇到k時,我們就把c,r,o,a數量都減一最後,我們判斷c,r,o,a是否都為0,為0則說明croakoffrogs的確是一堆蛙叫聲
判斷的時候還有乙個細節,即需要保證c >= r >= o >= a
但是這個時候我們還沒有判斷青蛙的數量,當遇到k時,我們先不著急對croa數量減一,先看當前c的值,c值就代表青蛙的數量(舉個例子:若c為2,則說明在同一時刻有兩隻青蛙在叫,因為此時還沒有遇到需要消除字母的k,也就是此時c的數目就是不同的青蛙數)
我們使用maxfrogs來記錄c的數量,若c大於maxfrogs則將它的值賦給maxfrogs,最後返回maxfrogs即可:
public
intminnumberoffrogs
(string croakoffrogs)
int maxfrogs =0;
int c =
0, r =
0, o =
0, a =0;
for(
char ch : chars)
break
;case
'o':
o++;if
(o > r)
break
;case
'a':
a++;if
(a > o)
break
;case
'k':
maxfrogs = math.
max(maxfrogs, c)
; c--
;r--
;o--
;a--
;break;}
}if(c + r + o + a >0)
return maxfrogs;
}
這是我能找到的最簡單最容易理解的版本,看完還是一頭霧水的小夥伴可以參考這裡哦。 力扣解題思路 打家劫舍
思路 題目 你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在...
力扣解題思路 素數
首先,如何判斷乙個數是否為素數呢,首先我們知道最小的素數是2,那麼我們從2開始判斷該數是否能找到被除數即可,完整 如下 public boolean isprimenum int i return true 思路 統計所有小於非負整數 n 的質數的數量。那麼這一題我們需要對每個小於n的數進行判斷一次...
力扣解題思路 醜數系列 糾錯記錄
思路 把只包含因子 2 3 和 5 的數稱作醜數 ugly number 例如 6 8 都是醜數,但 14 不是,因為它包含因子 7。習慣上我們把 1 當做是第乙個醜數。求按從小到大的順序的第 n 個醜數。首先從醜數的定義我們知道,乙個醜數的因子只有2,3,5,那麼醜數p 2 x 3 y 5 z,換...