zoukankan      html  css  js  c++  java
  • 字符判断

    题目描述(搜索)

    判断字符串b的所有字符是否都在字符串a中出现过,a、b都是可能包含汉字的字符串。b中重复出现的汉字,那么a中也要至少重复相同的次数。汉字使用gbk编码(简单的说,用两个字节表示一个汉字,高字节最高位为1的代表汉字,低字节最高位可以不为1)。
            int is_include(char *a, char *b); 
      返回0表示没有都出现过,返回1表示都出现过。 
    请设计一个算法。

    输入

    字符串a 字符串b

    输出

    0或者1

    样例输入

    aaaabbbcccdddss
    abc

    样例输出

    1

    破题思路

    首先原题中提到,‘b中重复出现的汉字,那么a中也要至少重复相同的次数。’,只是强调了次数,并没有说重复出现的字符之间的地理位置如何。
    本题主要涉及的函数:sorted函数(排序后再组成的字符串,可以方便对重复出现的字符进行统计。)、find函数。
    涉及的技巧:添加哨兵变量,只要最终哨兵值改变,说明有情况发生。

    程序源码

    raw_input_a = raw_input()
    raw_input_b = raw_input()
    #假如raw_input_a=’baac’,则经过sorted(raw_input_a)后变成[‘a’,’a’,’b’,’c’],经过join函数后变为’aabc’。
    sort_a = ''.join(sorted(raw_input_a))
    sort_b = ''.join(sorted(raw_input_b))
    #设置哨兵,当只要有一个字符找不到,就可以跳出循环
    idx = -1
    for i in range(len(sort_b)):
    #find(str,beg ,end) 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。
    	idx = sort_a.find(sort_b[i], idx + 1)
    	if idx == -1 :
    		break
    
    if idx == -1:
    	print (0)
    else:
    	print (1)
    
  • 相关阅读:
    行为的封装
    分页功能-----》链表实现
    python入门教程链接
    作用域 属性链接 存储类型
    Codeforces Round #598 (Div. 3)
    CCPC2018-湖南全国邀请赛
    【洛谷P2494】 [SDOI2011]保密(分数规划+最小割)
    【洛谷P3329】 [ZJOI2011]最小割(最小割树)
    【BZOJ3716】[PA2014]Muzeum(贪心+网络流)
    【洛谷P4542】 [ZJOI2011]营救皮卡丘(费用流)
  • 原文地址:https://www.cnblogs.com/wisteria68/p/12354094.html
Copyright © 2011-2022 走看看