笔试题目:从数字字符串中提取子字符串的个数和位置
文章目录
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