iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
自我挑戰組

Udemy課程上完你也可以開始Codewars 30天系列 第 3

[Day3] Codewars >>> Counting Duplicates (Python)

  • 分享至 

  • xImage
  •  

題目(6kyu):

Count the number of Duplicates
Write a function that will return the count of distinct case-insensitive alphabetic >characters and numeric digits that occur more than once in the input string. The input >string can be assumed to contain only alphabets (both uppercase and lowercase) and >numeric digits.

Example
"abcde" -> 0 # no characters repeats more than once
"aabbcde" -> 2 # 'a' and 'b'
"aabBcde" -> 2 # 'a' occurs twice and 'b' twice (b and B)
"indivisibility" -> 1 # 'i' occurs six times
"Indivisibilities" -> 2 # 'i' occurs seven times and 's' occurs twice
"aA11" -> 2 # 'a' and '1'
"ABBA" -> 2 # 'A' and 'B' each occur twice

解題思路

題目理解:輸入字串text,返還其重複字元的種類數量。其中字母大小寫差異會被視作同一種字母,可假設text僅會輸入字母&數字。

def duplicate_count(text):
    #使用string.upper(),將字母皆轉換為大寫保存
    string = text.upper()
    reslut = 0
    #使用set()來獲取所有字元種類,利用count()檢查字元在字串中的數量
    for character in set(string):
        if string.count(character)>1:
            reslut += 1
    return reslut 

string.upper() & string.lower()

由於字母大小寫需視為同一存在,故可使用upper()或lower()來統一字串大小寫。
可以留意到字串中的數字並不會因此被改變或使程式出現錯誤,同理可用在其他特殊字元上。

print("abcABC_123+=&".upper()) #輸出:ABCABC_123+=&
print("abcABC_123+=&".lower()) #輸出:abcabc_123+=&

此特性可以配合lower()用來刪選出其他非字母字元,如下示例:

def string_del_english_alphabet(text):
    reslut = ""
    for character in text :
        if character.upper() == character.lower():
            reslut += character
    return reslut
print(string_del_english_alphabet("abcABC_123+=&")) #輸出:_123+=&

上一篇
[Day2] Codewars >>> Multiples of 3 or 5 (Python)
下一篇
[Day4] Codewars >>>The search for Primes! Twin Primes!(Python)
系列文
Udemy課程上完你也可以開始Codewars 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言