資安

算法筆試模擬題精解之“Password”

在線編程介紹

阿里雲開發者社區在線編程產品,針對廣大開發者學習、實踐、面試、應聘、考試認證等打造的免費在線刷題神器。題庫來自筆試模擬題、算法大賽模擬題等,界面整潔明瞭,操作簡單,為用戶營造專心答題的學習環境。點擊鏈接開始體驗:https://developer.aliyun.com/coding

本文為大家介紹其中的 第135題:Password 的題目解析,具體如下:

題目描述

題目等級:容易
知識點:字符串、枚舉

查看題目:Password
Tom在期末考完試以後學習了Python語言,他發現Python語言確實是簡潔又強大,在他學完字符串以後,他寫了一個隨機生成密碼的python文件。

原理是這樣的,輸入一個字符串s,然後系統會隨機將這個s重新任意排序,然後又生成兩個字符串s1和s2,並拼接起來最終生成隨機密碼str = s1 + s + s2。

現在Tom有一個問題要問你,每次給你兩個字符串,一個是s(表示輸入的字符串),一個是str(表示產生的隨機字符串),問這兩個字符串是否符合上述要求的原理?如果符合輸出YES,否則輸出NO。1<=s,str<=100

輸入兩個字符串,一個是s,表示輸入的字符串,一個是str,表示產生的隨機字符串(1<=s,str<=100)

輸出內容為一行字符串,如果符合題意中的原理輸出"YES",否則輸出"NO"。

示例1
輸入:
"abc"
"xxxcabyyy"
輸出:
"YES"

解題方法: 枚舉法

解題過程中用到的參數列出:
char[] s1 : 密碼字符串的字符數組格式
char[] str1 : 隨機生成字符串的數組格式
int[] S : 密碼字符串中每個字符出現的個數。(i : 0-25)
int[] temp : S數組的備份,用於恢復S(使用clone方法獲得)
count : 表示成功匹配到的密碼字符的個數

計算過程:

  1. 將提供的字符串轉換為字符數組s1和str1
  2. 用一個長度為26的int型數組對密碼中各個字符出現的次數進行統計。
  3. 從第一個字符開始,對之後的挨個序列進行判斷

(1)如果 s1 中有這個字符, 則在 S 中將這個字符的個數 減1 (減了之後判斷該字符個數是否小於0),同時將 count+1

若減完後S中對應字符個數小於0,則表示該序列與s1 不匹配,則將count重置為0, 並使用 tempS 進行重置, 然後直接跳到下一個字符進行判斷。

(2)如果從某個字符 (str1[i]) 開始之後的一段序列的值全部為密碼字符序列中的值(即count的值 = s1中字符的個數),則代表這個就是密碼,可以直接輸出"YES"了

(3)如果對整個str1遍歷一遍後仍找不到與s1匹配的序列, 則表示str1中沒有密碼, 則輸出"NO"

特殊情況: 如果隨機字符串str的長度小於密碼字符串s的長度, 則肯定無法匹配成功, 這個時候就直接返回"NO"

時間複雜度: O(n^2)
空間複雜度: O(n)

看完之後是不是有了想法了呢,快來練練手吧>>查看題目:Password

720-150.png

Leave a Reply

Your email address will not be published. Required fields are marked *