从java中的给定字符串生成模式

从java中的给定字符串生成模式,java,algorithm,pattern-matching,Java,Algorithm,Pattern Matching,给定一个字符串str=ab12。 我试图生成如下模式 xbx2 ax1x abxx xx12 这里有一个更清楚的例子: 原始字符串182d3c 所需图案: 18xdxc 182x3x 18xx3c 182dxx 18xxxx查看18是常数,其他两个是变化的 x82dxc 1x2d3x xx2d3c 182dxx xx2dxx现在2d是常量,其他变量是变化的 等等等等 请注意,任何模式中的x数必须为偶数 我试着用正则表达式,但没用。 然后我想可能是二进制模式生成算法会有所帮助(它看起来有点像带有x

给定一个字符串
str=ab12
。 我试图生成如下模式

xbx2 ax1x abxx xx12

这里有一个更清楚的例子:
原始字符串
182d3c

所需图案:
18xdxc 182x3x 18xx3c 182dxx 18xxxx
查看18是常数,其他两个是变化的
x82dxc 1x2d3x xx2d3c 182dxx xx2dxx
现在2d是常量,其他变量是变化的

等等等等

请注意,任何模式中的
x
数必须为偶数

我试着用正则表达式,但没用。 然后我想可能是二进制模式生成算法会有所帮助(它看起来有点像带有
x
的二进制模式),但我仍然不在那里(

如果你需要更多的信息,请评论,我很乐意与大家分享

任何帮助都将不胜感激!

谢谢!

12个字符是安全限制

您可以使用位掩码…迭代
0到2^l-1
,(其中l=字符串长度),并检查
i
的位表示,如果设置位的数量为偶数。如果是偶数,则将设置位的位置标记为
x的
,并保留字符串的其余部分

该算法具有复杂度
O(l*2^l)
,这与
max(l)=12
一样好。因此,运算数量的顺序为
2.4e4
,很容易在1s内实现

编辑:根据要求,Java中的示例代码

EDIT2:用新的工作代码替换以前的代码:)

对于另一个输入,
1823ab
,我将获得所有30个可能的(6C2+6C4)字符串作为输出:

1823xx
182xax
182xxb
18x3ax
18x3xb
18xxab
18xxxx
1x23ax
1x23xb
1x2xab
1x2xxx
1xx3ab
1xx3xx
1xxxax
1xxxxb
x823ax
x823xb
x82xab
x82xxx
x8x3ab
x8x3xx
x8xxax
x8xxxb
xx23ab
xx23xx
xx2xax
xx2xxb
xxx3ax
xxx3xb
xxxxab

因此,一次只能看到两个字母/数字?如果您需要如标题所述的Java解决方案,为什么要使用c#标记?输入字符串的最大长度是多少?您是否生成所有的模式(作为字符串)并在以后使用它或其他什么…我的意思是…它的目的是什么(如果这很重要的话)?不,我需要与上面所示完全相同的模式
x
表示x,它不是占位符或变量。有时看到图案,有时看到它的两个字母/数字,有时看到它的四个字母/数字。但是
x
的数量在所有情况下都是偶数。@Mrmj“一天结束的逻辑很重要”。不,标签的使用是为了让其他人找到与他们的特定问题相关的问题。如果某人的C#代码有问题,他可能会通过
C#
标记进行搜索。但是,如果他偶然发现了这个与C#无关的问题,这对他没有多大帮助。同样的原因也适用于
javascript
标记,因为
javascript!=Java
。谢谢你的回答,但请你再详细说明一下。我无法将其关联起来。@Mrmj,我已经更新了答案…如果您还有疑问…请放心。虽然此解决方案确实让我们更接近解决方案,但对于
1x2x
18xx
案例,逻辑仍然失败。因为
c=n%2和n/=2
逻辑排除了许多情况。比如:我运行了你的代码,它为
1823
给出了
xx23,x8x3,xx23
,但是输出应该是
xx23,x8x3,1x2x,18xx
。无论如何,我会努力改进这段代码,如果你也有一些空闲时间,请研究一下。无论如何,再次感谢。不……它不……想想看……逻辑包括所有可能的长度
l
位表示……因此它不可能留下任何情况……请尝试运行该程序。。(虽然我没有测试过它(我直接在这里输入),但它可能会出现一些编译错误……请仔细阅读我最后的评论。我已经运行了,并给了你结果。
18xx
1x2x
1xx3
x82x
x8x3
xx23
1823xx
182xax
182xxb
18x3ax
18x3xb
18xxab
18xxxx
1x23ax
1x23xb
1x2xab
1x2xxx
1xx3ab
1xx3xx
1xxxax
1xxxxb
x823ax
x823xb
x82xab
x82xxx
x8x3ab
x8x3xx
x8xxax
x8xxxb
xx23ab
xx23xx
xx2xax
xx2xxb
xxx3ax
xxx3xb
xxxxab