問題:如何判斷輸入的字串兒中的每個字元是否都具有唯一性?
我們先來隨便定義乙個可以輸入字串兒的函式,然後再呼叫這個函式,看看返回的結果是否和我們預期的結果一致:
func challenge(input: string) -> bool
challenge(input: "no duplicates") // 應該返回true
challenge(input: "abcdefghijklmnopqrstuvwkyz") // 應該返回true
challenge(input: "aabbcc") // 應該返回true
challenge(input: "hello, world") // 應該返回false
很顯然,在第4次呼叫challenge(input: )函式的時候,我們輸入了字串兒「hello,world」,它顯然不符合我們題目的要求,因為該字串兒中包含了3個l字元,以及兩個o字元,最終理應返回false,但是程式執行的結果是返回了true:
判斷字串兒中的字元是否唯一.png
所以,我們需要對上面的**進行相應的改造。具體的思路是:先定義乙個可變的character型別的陣列,專門用來存放我們輸入的字元,然後遍歷輸入的所有字元,並且判斷該字元是否已經存在於character型別的陣列中,如果存在,則直接返回false,如果不存在,則將該字元儲存到character型別的陣列中。用**表示如下:
func challenge1(input: string) -> bool
// 如果不包含,則將該字元儲存到陣列usedletters中
}return true
}challenge1(input: "no duplicates") // 應該返回true
challenge1(input: "abcdefghijklmnopqrstuvwkyz") // 應該返回true
challenge1(input: "aabbcc") // 應該返回true
challenge1(input: "hello, world") // 應該返回false
呼叫challenge1(input: )函式,重新輸入上面的字串,這回我們可以看到輸入「hello,world」以後,結果返回false了:
判斷字串兒中的字元是否唯一.png
很多時候,解決問題的方案不止一種。我們可以利用set集合中的元素不能重複這一特性來簡化上面的**:
func challenge1b(input: string) -> bool
challenge1b(input: "no duplicates") // 應該返回true
challenge1b(input: "abcdfghijklmnopqrstuvwxyz") // 應該返回true
challenge1b(input: "aabbcc") // 應該返回true
challenge1b(input: "hello, world") // 應該返回false
因為在set集合中,重複的元素只能算作一次,所以如果我們輸入的字串兒中包含重複的字元,那麼最後兩邊的個數肯定是不相等的,也就是會返回false:
判斷字串兒中的字元是否唯一.png
利用set的特性精簡**以後,效果是一樣的,但是效率更高。
判斷字串是否唯一?
實現乙個演算法,確定乙個字串 s 的所有字元是否全都不同。示例 1 輸入 s abcdeff 輸出 false 示例 2 輸入 s abc 輸出 true思路1 根據字符集大小定義乙個合理的陣列arr例如,ascii 256,定義個256大小的陣列,遍歷字串s,設定s i 最後統計arr長度,跟s的...
字串中的字元是否唯一
實現乙個演算法來判斷乙個字串中的字元是否唯一 即沒有重複 不能使用額外的資料結構。即只使用基本的資料結構 字串中的字元是否唯一?一拿到題很容易就能想到以hash的方式來做。只能用基本的資料結構的要求其實很明顯的也在提示我們,只要那個陣列模擬成hash即可。字串中有26個字母。注 若不止包含26個字母...
字串 判斷是否
字串判斷的所有 isdigit 是否全是數字 isalpha 是否全是由字母組成 返回true isalnum 是否由字母和數字組成 islower 是否都是小寫字母 isupper 是否都是大寫字母 istitle 是否英文本母首字母都是大寫 isalpha 是否全是英文 中文的漢字會被判為tru...