在python中查找字符串的有效方法

亚伯拉罕

系统会为您提供两个字符串,AA和BB。查找AA和BB中是否都出现一个子字符串。

所有字符串仅包含小写拉丁字母。

在上方,您会看到hackerranck的一个问题我编写了以下程序来解决它:

T = int(raw_input())

for t in xrange(T):
    s1 = raw_input()
    s2 = raw_input()
    length1 = len(s1)
    length2 = len(s2)
    checked = list()
    if length1<length2:
        for letter in s1:
            if len(checked)== 26:
                break
            if letter in checked:
                next
            checked.append(letter)
            if letter in s2:
                print "YES"
                break
        else:
            print "NO"
    else:
        for letter in s2:
            if letter in checked:
                next
            if len(checked)==26:
                break
            checked.append(letter)
            if letter in s1:
                print "YES"
                break
        else:
            print "NO"

在添加之前,它工作正常if len(checked)==26: break我添加了这一行以使其效率更高,方法是只检查每个字母一次,并消除了提交过程中的超时错误,但是添加了这一行后,对于某些测试用例,我的程序的答案是错误的。为什么?

马丁·彼得斯(Martijn Pieters)

您的错误在这里:

if letter in checked:
    next

nextPython中函数使用if letter in checked: next是无操作的,您也可以使用过pass,因为它将仅引用函数对象而不调用它。当然不会continue到下一个循环迭代。

所以,不管结果是什么letter in checked就是,你继续补充letterchecked由于checked是列表,而不是集合,因此您将向列表中添加重复项,并且最终很容易获得26个以上的条目。

使用:

if letter in checked:
    continue

并考虑使用一个集合checked来使in成员资格测试成为O(1)运算而不是O(N)。

说到集合,这基本上是一个集合相交问题有没有出现在任何两个单个字母s1s2您正在正确测试集合是否不相交;因此请使用Python内置set类型在最坏的情况下,这会执行O(N * M)循环,但是循环是在C代码中进行的:

print('NO' if set(s1).isdisjoint(s2) else 'YES')

通过使用set.isdisjoint()未创建的新集合,仅返回布尔值。set(s1)循环遍历所有内容s1以生成该集合,set.isdisjoint()一旦找到匹配项,该集合将尽早退出,针对该集合的每个匹配测试均为O(1)。

您可以查看是否根据长度进行交换s1s2仍然可以改善测试时间:

if len(s1) > len(s2):
    s1, s2 = s2, s1
print('NO' if set(s1).isdisjoint(s2) else 'YES')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有效地查找字符串中的重复字符

来自分类Dev

有效地查找字符串中的n个最长单词

来自分类Dev

以有效的方式在字符串之间查找字符串

来自分类Dev

查找python中较长字符串中是否存在短字符串的有效方法

来自分类Dev

从字符串中查找有效出现的文本

来自分类Dev

在字符串熊猫列中查找多个关键字的更有效方法

来自分类Dev

在文件查找和grep中搜索字符串的有效方法

来自分类Dev

Python:在字符串中查找字符串

来自分类Dev

python-检查字符串是否在列表中的有效方法

来自分类Dev

Python:在大写字母之前在字符串中添加空格的有效方法

来自分类Dev

从词汇表中替换字符串的有效方法 - Python

来自分类Dev

Python,在字符串中查找字符的位置

来自分类Dev

查找字符串中的所有匹配项

来自分类Dev

查找字符串中模式的所有索引?

来自分类Dev

从字符串中删除多个子字符串的最有效方法?

来自分类Dev

Python使用子字符串在字符串中查找字符串

来自分类Dev

在Python3中查找字符串中单词的所有出现

来自分类Dev

查找字符串并在Python中插入文本

来自分类Dev

查找字符串中的特定单词,Python

来自分类Dev

查找字符串并在Python中插入文本

来自分类Dev

在Python中查找字符串+整数的索引

来自分类Dev

查找字符串中包含的所有子字符串的最快方法是什么?

来自分类Dev

在Python3中查找字符串中所有单词的出现

来自分类Dev

如何在python中查找字符串向量之间的所有组合

来自分类Dev

在python中解析具有dict类型元素的列表查找字符串

来自分类Dev

有效地查找和替换文档中的字符串

来自分类Dev

有效查找大列表中的字符串不匹配

来自分类Dev

在java中查找括号字符串的有效性

来自分类Dev

使用sed有效查找和替换文件中的字符串

Related 相关文章

  1. 1

    有效地查找字符串中的重复字符

  2. 2

    有效地查找字符串中的n个最长单词

  3. 3

    以有效的方式在字符串之间查找字符串

  4. 4

    查找python中较长字符串中是否存在短字符串的有效方法

  5. 5

    从字符串中查找有效出现的文本

  6. 6

    在字符串熊猫列中查找多个关键字的更有效方法

  7. 7

    在文件查找和grep中搜索字符串的有效方法

  8. 8

    Python:在字符串中查找字符串

  9. 9

    python-检查字符串是否在列表中的有效方法

  10. 10

    Python:在大写字母之前在字符串中添加空格的有效方法

  11. 11

    从词汇表中替换字符串的有效方法 - Python

  12. 12

    Python,在字符串中查找字符的位置

  13. 13

    查找字符串中的所有匹配项

  14. 14

    查找字符串中模式的所有索引?

  15. 15

    从字符串中删除多个子字符串的最有效方法?

  16. 16

    Python使用子字符串在字符串中查找字符串

  17. 17

    在Python3中查找字符串中单词的所有出现

  18. 18

    查找字符串并在Python中插入文本

  19. 19

    查找字符串中的特定单词,Python

  20. 20

    查找字符串并在Python中插入文本

  21. 21

    在Python中查找字符串+整数的索引

  22. 22

    查找字符串中包含的所有子字符串的最快方法是什么?

  23. 23

    在Python3中查找字符串中所有单词的出现

  24. 24

    如何在python中查找字符串向量之间的所有组合

  25. 25

    在python中解析具有dict类型元素的列表查找字符串

  26. 26

    有效地查找和替换文档中的字符串

  27. 27

    有效查找大列表中的字符串不匹配

  28. 28

    在java中查找括号字符串的有效性

  29. 29

    使用sed有效查找和替换文件中的字符串

热门标签

归档