當以下條件都滿足時,乙個密碼被視為是強密碼:
至少包含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...