筆試題目:從數字字符串中提取子字符串的個數和位置

筆試題目:從數字字符串中提取子字符串的個數和位置

0.前言

關鍵在於子字符串的提取,如十進制21,的二進制是‘10101’,從中找到‘101’
出現的個數,以及從右往左數時首次出現的位置

1.題目描述

例1:

輸入:21
輸出:2 0

例2:

輸入:5
輸出:1 0

例3:
輸入:10
輸出:1 1

2.解決代碼

# coding=utf-8
import sys




def int2bin_str():
    # 讀取int類型數字
    #int_num = int(sys.stdin.readline())
    int_num = 85
    # 轉換爲bin類型字符串
    need_middle_str = str(bin(int_num))
    # 去除前綴0b
    need_str = str(need_middle_str[2:])
    return need_str

def deal_with_str(need_str,sub_str):
    reverse_str = need_str[::-1]
    print(reverse_str)
    first_position = reverse_str.find(sub_str)
    print(need_str)
    #count_number = need_str.count(sub_str)

    #count_number = str(re.findall(sub_str,need_str))
    count_number = 0
    for i in range(len(need_str) - len(sub_str) + 1):  # 因爲i的下標從0開始,所以len(need_str)-1
        if need_str[i:i + len(sub_str)] == sub_str:
            count_number += 1
    result = str(count_number) + ' ' + str(first_position)
    print(result)


if __name__ == "__main__":
    # 1.轉換爲二進制的字符串類型
    sub_str = '101'
    need_str = int2bin_str()
    # 2.查找字串並返回結果
    deal_with_str(need_str,sub_str)

3. 注意事項

爲什麼查找個數不能用count實現?
如從‘10101’中得到的結果是1 0 而實際結果是2 0

 #count_number = need_str.count(sub_str) 

因爲把‘10101’從左之右得到‘101’之後,只剩下01,所以結果顯示1,因此不能此處不能使用自帶的count函數,要根據實際情況修改,正確修改如下


count_number = 0
for i in range(len(need_str) - len(sub_str) + 1):  # 因爲i的下標從0開始,所以len(need_str)-1
    if need_str[i:i + len(sub_str)] == sub_str:
        count_number += 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章