如何解决以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
是字符串 c
和 a
的交织,则返回 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 comprehension
、map
、filter
、reduce
或 {{ 1}} 等
解决方法
将 lru_cache 与 lambda 结合使用以加快速度的一种方法:
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 举报,一经查实,本站将立刻删除。