演算法 字元diff 九章演算法 密碼強度檢查器

2021-10-16 03:14:33 字數 1291 閱讀 6367

當以下條件都滿足時,乙個密碼被視為是強密碼:

至少包含6個字元,但不超過20個字元。

至少包含乙個小寫字母,乙個大寫字母,和乙個數字。

不能包含三個連續的重複字元("...aaa..."是弱密碼,但"...aa...a..."是強密碼,假設它們的其他條件都滿足了)。

寫乙個函式strongpasswordchecker(s),它將乙個字串s作為輸入,並且返回將其轉換成強密碼需要的最少改變次數。如果s已經是乙個強密碼了,返回0

插入、刪除或者替換任意乙個字元都視為一次改變。

樣例 1:

輸入:"aaa123"

輸出:1

解釋:"aaa123"->"aaa123"

樣例 2:

輸入:"a"

輸出:5

解釋:"a"->"aa"->"aaa"->"aaa1"->"aaa12"->"aaa123"

【題解】考點:題解:本題根據要求最小的改變次數,確定修改策略即可。

變為強密碼需要解決三種問題:

接下來,按照長度進行討論。

public class solution 

if (s.charat(i) >= 'a' && s.charat(i) <= 'z')

if (s.charat(i) >= '0' && s.charat(i) <= '9')

int j = i;

while (i < n && s.charat(i) == s.charat(j))

v[j] = i - j; //標記j位置開始連續重複字元的數量

}int missing = (lower + upper + digit); //缺失的字元種類數

if (n < 6)

else

v[i] -= k;

over -=k; //刪除字元}}

for (int i = 0; i < n; ++i)

if (v[i] >= 3)

}res += math.max(missing, left); //每次除以3即為替換的字元個數

}return res;}}

動態規劃 九章演算法

最近看了九章演算法的動態規劃班,受益匪淺,一點簡要的筆記分享給大家 什麼是動態規劃?簡而言之,就是計算並儲存小問題的解,並將這些解組合成大問題的解。動態規劃題目的特點 1 計數 1 有多少種方式走到右下角 2 有多少種方法選出k個數使得和為sum 2 求最大值最小值 1 從左上角到右下角路徑的最大數...

演算法導論 第九章

這章介紹了中位數和順序統計學 中位數即乙個序列中最中間的數字,在快速排序中非常有意義,在其它的一些應用中也很有效,因為可以2分序列,這樣會有更好的效率。這章主要介紹如何不排序來找到序列的順序,由於不需要排序,可以減少很多比較的操作,最終可以獲得一些線性的演算法,得到排名第i的數字。演算法的基礎是首先...

九章演算法系列(一)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!問題 實現乙個memcpy函式 本題主要考慮兩點 1 記憶體重疊與否2 重疊記憶體的copy方式 無重疊的記憶體copy void mymemcpy void dst,const void src,size t num if des src num...