筆試題目:從數字字符串中提取子字符串的個數和位置
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