龙空技术网

Python数据结构与算法59:排序与查找编程练习题3:字符串的重排

挂可挂 89

前言:

眼前小伙伴们对“数据结构python版填空题”可能比较关切,看官们都需要分析一些“数据结构python版填空题”的相关文章。那么小编在网摘上汇集了一些关于“数据结构python版填空题””的相关文章,希望看官们能喜欢,姐妹们一起来学习一下吧!

注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性。

本文阅读时间约为5分钟。

给定一个字符串s与待查找字符串p,请给出使得s[i:i+len(p)]是p的一个字母重排的所有下标i。

题目保证字符串p非空。

输入格式:

两行字符串,第一行为s,第二行为p。

输出格式:

所有满足条件的下标从小到大排列,以空格分隔输出。

若无对应下标,则输出"none"。

输入样例:

cbaebabacdabc

输出样例:

0 6

参考代码模板:

def findAnagrams(s, p):    # code here    pass s = input()p = input()findAnagrams(s, p)

解答:本题的关键在于如何判断一个字符串s的子串s[i:i+len(p)]是另一个字符串p的字母重排,也就是如何判断两个字符串互为对方的字母重排。我们可以利用集合的无序特性,简单直接地来实现这个判断,即

set(p) == set(s[i:i+len(p)])

满足上述表达式的p和s必然满足“字符串s的子串s[i:i+len(p)]是字符串p的字母重排”这一要求。

解决这个问题,本题也就简单了。

参考代码如下:

def findAnagrams(s, p):    # code here    s1 = ''  # 备用字符串。     for i in range(len(s)):        # 利用集合的特性判断s[i:i+len(p)]是否为p的字母重排。        if set(p) == set(s[i:i+len(p)]):            s1 += str(i)            if s1 == '':  # 若无对应下标i,则输出"none"。        print('none')    else:  # 若有对应下标i,将所有满足条件的下标i从小到大排列,以空格分隔输出。        print(' '.join(s1))     s = input()p = input()findAnagrams(s, p)# 测试数据如下:# s = 'cbaebabacd'# p = 'abc'

To be continued.

标签: #数据结构python版填空题