笔试题目:从数字字符串中提取子字符串的个数和位置

笔试题目:从数字字符串中提取子字符串的个数和位置

文章目录

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
上一篇:/lib/lsb/init-functions is need by


下一篇:HDU-1203 I NEED A OFFER!