微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以pythonic方式检查交织字符串

如何解决以pythonic方式检查交织字符串

我在检查交织字符串时遇到问题。所以,我有3个字符串,我需要检查是否可以通过前两个字符串交织形成第三个字符串。

为简化起见,交织字符串意味着通过在没有任何特定模式的情况下交替字母来合并它们。

例如:"abc""123" 是两个字符串,可能的交织可以是 "abc123""a1b2c3""ab1c23" 等混合它们,没有任何模式但遵循顺序。

一个例子,对于错误的情况:

str1 = "aabcc",str2 = "dbbca",str3 = "aadbbbaccc"  # This is false case,where str3 is not interweaving from str1 and str2

我尝试过的:

我尝试了以下对我有用的解决方案。如果字符串 True 是字符串 ca 的交织,则返回 b 否则返回 False

def weavingstring(a,b,c):
    for i in c:
        if len(a)>0:
            if i == a[0]:
                a=a[1:]
        if len(b)>0:
            if i == b[0]:
                b=b[1:]
    if len(a) > 0 or len(b) > 0:
        return False
    return True
            

print(weavingstring("abc","def","abcdef"))  # True here
print(weavingstring("aabcc","dbbca","aadbbbaccc"))  # False here

我想要的

我有正常的解决方案,我想知道是否有任何 Pythonic 方法可以通过使用 list comprehensionmapfilterreduce 或 {{ 1}} 等

解决方法

lru_cachelambda 结合使用以加快速度的一种方法:

from functools import lru_cache
class Solution:
    def isInterleave(self,s1: str,s2: str,s3: str) -> bool:
        return (memo:=lru_cache()
            ( lambda i=0,j=0,k=0:
                (i,j,k) == (len(s1),len(s2),len(s3))
                or ( i < len(s1) and k < len(s3) and s1[i] == s3[k] and memo( i+1,k+1 ) )
                or ( j < len(s2) and k < len(s3) and s2[j] == s3[k] and memo( i,j+1,k+1 ) ) )
        )()
        
,

我对一个简单的递归解决方案感兴趣吗?

def weaving(a: str,b: str,res: str) -> bool:
    if not a: return b == res
    if not b: return a == res
    if not res: return False
    if res[0] == a[0]:
        return weaving(a[1:],b,res[1:])
    elif res[0] == b[0]:
        return weaving(a,b[1:],res[1:])
    else:
        return False
,

一个简单的解决方案是使用正则表达式。

import re
def iswoven(first,second,test):
    return all((re.search(r'.*'.join(x),test) for x in (first,second)))


>>> iswoven('abc','123','a1b2c23')
True
>>> iswoven('abc','a1b223')
False

这将检查测试字符串是否匹配 'a.*b.*c' 和 '1.*2.*3' 并返回结果。

根据字符串的长度,这最终可能会尝试匹配一些非常多毛的正则表达式,所以买家要当心。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?