gpt4 book ai didi

wolfram-mathematica - Mathematica 中的字符串验证

转载 作者:行者123 更新时间:2023-12-04 08:17:45 24 4
gpt4 key购买 nike

我有一个想要优化的字符串验证函数。该字符串的长度为 2n,由 01 组成,例如 str="100001"。我想测试一下:

1) 字符串中奇数索引位置的 1 的数量(必须不少于 1)是否等于偶数索引位置的数量

2) 是否对于每个 StringTake[str,2*i]i 都从 1 运行到 n-1,字符串中奇数索引位置中 1 的数量不等于偶数索引位置中的 1 数量。

总之,我想测试位置2n是否是第一次奇数索引位置中1的数量该字符串等于均匀索引位置中的字符串。

"100001"101101 是一个很好的字符串,但不是 100100100000 也不是 000000

非常感谢。

最佳答案

此代码不会测试无效字符串(字符不是“0”或“1”,长度不均匀)。

goodString[str_String] := Module[
{digits, cumdiffs, pos},
digits = Transpose[Partition[
IntegerDigits[ToExpression[str], 10, StringLength[str]], 2]];
cumdiffs = Subtract @@ Accumulate /@ digits;
pos = Position[cumdiffs, 0, 1, 1];
Length[pos] == 1 && pos[[1, 1]] == Length[cumdiffs]
]

你的例子:

goodString /@ {"100001" , "101101", "100100", "100000", "000000"}

输出[302]= {真、真、假、假、假}

可能有更快的方法,例如与 NestList.此外,如果速度是一个大问题并且字符串可能很长,您可以在预处理中拆分 IntegerDigits[ToExpression[...]] 并在其余部分使用 Compile。

丹尼尔·利希特布劳沃尔夫拉姆研究

关于wolfram-mathematica - Mathematica 中的字符串验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5146944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com