寻找在 Python 中分割字符串的多种方法的程序
假设我们有一个二进制字符串s,我们可以将s拆分为3个非空字符串s1、s2、s3,使得(s1concatenates2concatenates3=s)。我们必须找到可以拆分s的方式的数量,以便在s1、s2和s3中字符“1”的数量相同。答案可能很大,所以返回答案mod10^9+7。
因此,如果输入类似于s="11101011",那么输出将为2,因为我们可以将它们拆分为"11|1010|11"和"11|101|011"。
为了解决这个问题,我们将按照以下步骤操作:
count:=计算s中1的数量
米:=10^9+7
ans:=一个大小为2并用0填充的数组
如果countmod3不等于0,则
返回0
否则当计数等于0时,则
return(nCr其中n是s-1的大小,r是2)modm
左:=0
右:=s的大小-1
cum_s:=0,cum_e:=0
而cum_s<=商数/3或cum_e<=商数/3,做
ans[1]:=ans[1]+1
ans[0]:=ans[0]+1
cum_e:=cum_e+1
cum_s:=cum_s+1
如果s[left]与“1”相同,则
如果s[right]与“1”相同,则
如果cum_s与count/3的商相同,则
如果cum_e与count/3的商相同,则
左:=左+1
右:=右-1
返回(ans[0]*ans[1])modm
让我们看下面的实现来更好地理解:
示例
def solve(s):
count = s.count("1")
m = 10**9 + 7
ans = [0, 0]
if count % 3 != 0:
return 0
elif count == 0:
return comb(len(s)-1,2) % m
left = 0
right = len(s)-1
cum_s = 0
cum_e = 0
while(cum_s <= count//3 or cum_e <= count//3):
if s[left] == "1":
cum_s+=1
if s[right] == "1":
cum_e+=1
if cum_s == count//3:
ans[0]+=1
if cum_e == count//3:
ans[1]+=1
left += 1
right -= 1
return (ans[0]*ans[1]) % m
s = "11101011"
print(solve(s))输入
"11101011"输出结果
2