力扣解題思路 1419 數青蛙

2021-10-23 19:03:06 字數 1573 閱讀 3806

思路:給你乙個字串 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,換...