2015-02-24 74 views
0

我有一个3个随机字符的二维数组,a,b和c。我需要确保没有列或行有三个或更多的重复字符。 我不太确定如何检查数组。我想我需要使用循环来通过数组,但我不知道如何检查是否有重复。为了澄清,如何搜索2D数组以确保连续字符数不超过3个?

如果列有三个在这将不允许行或可能3个B的是在柱中,等等 所以,如果它像AAA在3个连续的数组索引(在以下方面行和列),它应该停止。

+2

你试过了什么?这是功课吗?如果是这样的:你是否知道你在法律上有义务引用StackOverflow,如果你从别处使用解决方案? – 2015-02-24 20:43:13

+0

是的,它是功课。我想弄清楚如何 – Matt 2015-02-24 20:47:08

+0

你是对的循环。 3个字符表示您应该检查当前字符的左边一个字符和右边一个字符,列的上边和下边也是。祝你好运! – 2015-02-24 20:47:38

回答

0

如果您知道数组的索引,则需要使用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个元素结合在一起。如果它们相等,就会中断。

+0

很好的答案。我希望OP遵循SO的条款和许可证,这要求OP链接到这个答案,并说“嵌套循环方法是由Manik Singh完成的”或类似的东西。 – 2015-02-24 20:57:35

+0

'char [] [] arr = new char [20] [20];'这是什么? – 2015-02-24 23:18:13

+0

哎呀对不起,我编码在Java中,在C++中,我们可以通过以下方式声明二维数组: char arr [20] [20]; – 2015-02-25 01:17:28

0

您可以使用自动机。的AAABBBCCC一眼就能认出序列是:

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