判斷字串中的字元是否具有唯一性

2021-08-08 13:34:33 字數 1888 閱讀 1685

問題:如何判斷輸入的字串兒中的每個字元是否都具有唯一性?

我們先來隨便定義乙個可以輸入字串兒的函式,然後再呼叫這個函式,看看返回的結果是否和我們預期的結果一致:

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...