我有一个3个随机字符的二维数组,a,b和c。我需要确保没有列或行有三个或更多的重复字符。 我不太确定如何检查数组。我想我需要使用循环来通过数组,但我不知道如何检查是否有重复。为了澄清,如何搜索2D数组以确保连续字符数不超过3个?
如果列有三个在这将不允许行或可能3个B的是在柱中,等等 所以,如果它像AAA在3个连续的数组索引(在以下方面行和列),它应该停止。
我有一个3个随机字符的二维数组,a,b和c。我需要确保没有列或行有三个或更多的重复字符。 我不太确定如何检查数组。我想我需要使用循环来通过数组,但我不知道如何检查是否有重复。为了澄清,如何搜索2D数组以确保连续字符数不超过3个?
如果列有三个在这将不允许行或可能3个B的是在柱中,等等 所以,如果它像AAA在3个连续的数组索引(在以下方面行和列),它应该停止。
如果您知道数组的索引,则需要使用for循环。
所以可以说:
char[][] arr= new char[20][20];
for(int i=0; i<18;i++){
for(int j=0; j<18;j++){
if(arr[i][j] ==arr[i][j+1] && arr[i][j] == arr[i][j+2]))
{
break;//mark it as Duplicate
}
else if (arr[i][j] == arr[i+1][j] && arr[i][j] == arr[i+2][j])
{
break;//mark it as Duplicate
}
else
continue;
}
}
所以基本上你遍历数组,并比较连续3个元素结合在一起。如果它们相等,就会中断。
很好的答案。我希望OP遵循SO的条款和许可证,这要求OP链接到这个答案,并说“嵌套循环方法是由Manik Singh完成的”或类似的东西。 – 2015-02-24 20:57:35
'char [] [] arr = new char [20] [20];'这是什么? – 2015-02-24 23:18:13
哎呀对不起,我编码在Java中,在C++中,我们可以通过以下方式声明二维数组: char arr [20] [20]; – 2015-02-25 01:17:28
您可以使用自动机。的AAA
,BBB
和CCC
一眼就能认出序列是:
state input next stop
===== ===== ==== ====
0 A a1 no
0 B b1 no
0 C c1 no
a1 A a2 no
a1 B b1 no
a1 C c1 no
b1 A a1 no
b1 B b2 no
b1 C c1 no
c1 A a1 no
c1 B b1 no
c1 C c2 no
a2 A 3 yes
a2 B b1 no
a2 C c1 no
b2 A a1 no
b2 B 3 yes
b2 C c1 no
c2 A a1 no
c2 B b1 no
c2 C 3 yes
3 A 3 yes
3 B 3 yes
3 C 3 yes
你可以为每一行和每一列运行这个自动机,一旦你得到的输出yes
(已检测到的连续三个字母)停止你”只要你通过矩阵识别出第一次出现三个连续的字母,只有两遍(一行用于行,其他为列),就会立即停止。当然,初始状态是0
。
你试过了什么?这是功课吗?如果是这样的:你是否知道你在法律上有义务引用StackOverflow,如果你从别处使用解决方案? – 2015-02-24 20:43:13
是的,它是功课。我想弄清楚如何 – Matt 2015-02-24 20:47:08
你是对的循环。 3个字符表示您应该检查当前字符的左边一个字符和右边一个字符,列的上边和下边也是。祝你好运! – 2015-02-24 20:47:38