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

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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值