Qia*_* Li 2 wolfram-mathematica
我有一个我想要优化的字符串验证功能.该字符串是长度2n
和组成0
和1
的,例如,str="100001"
.我想测试一下:
1)1
字符串中奇数索引位置的数字(必须不小于1)是否等于均匀索引位置的数字
2)对于每一个StringTake[str,2*i]
,i
从是否1
开始n-1
,1
字符串中奇数索引位置的数量不等于均匀索引位置中的数量.
总之,我想测试位置是否2n
是第一次数量1
的在字符串中的奇怪indexded位置等于在均匀度位置.
"100001"
并且101101
是一个很好的字符串,但不是100100
,100000
也不是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]
]
Run Code Online (Sandbox Code Playgroud)
你的例子:
goodString /@ {"100001" , "101101", "100100", "100000", "000000"}
Run Code Online (Sandbox Code Playgroud)
Out [302] = {True,True,False,False,False}
可能有更快的方法,例如使用NestList.此外,如果速度是一个大问题并且字符串可能很长,您可以在预处理中拆分IntegerDigits [ToExpression [...]]并在其余部分使用Compile.
Daniel Lichtblau Wolfram Research
归档时间: |
|
查看次数: |
176 次 |
最近记录: |