Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算条件字符串分区_Java_Algorithm - Fatal编程技术网

Java 计算条件字符串分区

Java 计算条件字符串分区,java,algorithm,Java,Algorithm,我需要帮助编写一个程序,计算可以由满足以下属性的字母网格组成的分区数: 分区必须只包含两个字母(因此,如果网格包含字母A、B和C,则分区只能包含其中两个字母) 两个字母中的一个必须彼此相邻(这意味着我们必须能够横穿整个区域,只上/下/左/右移动) 第二个字母必须包含在两个或多个区域中 分区不能包含在任何其他分区中(这意味着分区的子集也不能满足分区的属性) 如果需要,分区可以是整个网格 输入是一个尺寸为N x N的网格。我在第一行被赋予N **Example:** *** *Input:*

我需要帮助编写一个程序,计算可以由满足以下属性的字母网格组成的分区数:

  • 分区必须只包含两个字母(因此,如果网格包含字母A、B和C,则分区只能包含其中两个字母)
  • 两个字母中的一个必须彼此相邻(这意味着我们必须能够横穿整个区域,只上/下/左/右移动)
  • 第二个字母必须包含在两个或多个区域中
  • 分区不能包含在任何其他分区中(这意味着分区的子集也不能满足分区的属性)
  • 如果需要,分区可以是整个网格
输入是一个尺寸为N x N的网格。我在第一行被赋予N

**Example:** 
***
*Input:*

4
ABBC
BBBC
AABB
ABBC

***
*Output*
2
****
在本例中,第一行“4”告诉我们接下来将有一个4x4网格输入。输出2由满足上述属性的子网格数量确定。 在本例中,两个子网格是:

ABB
BBB
AAB
ABB

***
and
***
BC
BC
BB
BC
***
请注意,两个子网格仅包含两个不同的字符

在第一个子网格中,我们可以通过向上/向下/向左/向右移动来横穿所有“B”字符。有两个“A”区域。因此,这些性质是令人满意的

在第二个子网格中,我们可以横切所有的“B”字符。我们不能横切所有的“C”字符。因此,这些性质是令人满意的

由于有两个子网格,因此输出为2


我的想法

我开始阅读维度并在网格中循环。这是我目前拥有的代码:

import java.io.*;
import java.util.*;
public class partition  {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);      
        int dimensions = scan.nextInt();
        for (int i = 0 ; i  < dimensions; i++) {
            for (int j = 0  ; j < dimensions; j++ ) {

            }
        }
    }
}
import java.io.*;
导入java.util.*;
公共类划分{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
int dimensions=scan.nextInt();
对于(int i=0;i

我认为将所有字符读入一个数组可能是一个好方法,但我不确定如何从那里开始。有人能给我一些建议吗?我相信想出一个有效的算法将是其中最困难的部分。

这看起来像是一个竞争(或家庭作业)问题。如果它来自一个已经结束的比赛,请发布一个链接到来源,这样那些不想不公平地帮助别人的人就可以贡献。好的,试着想出一种“暴力”算法,它肯定会给出正确的答案,尽管可能不是最有效的方法。请描述一下它的时间复杂度,然后我们将看看可能的改进。提示:想想如何测试给定的子矩形是否满足条件。然后,您可以生成每个可能的子矩形并测试每个子矩形。检查e是否有两个不连续的字母出现是否有效?这可以告诉我这封信是否有两个不同的区域。你所说的不连续是什么意思?例如,如果您的意思是,一行的一部分看起来像
ABA
,这是不够的,因为这两个
a
s可能以其他方式连接(例如,通过下一行中的
AAA
),这看起来像是一个竞争(或家庭作业)问题。如果它来自一个已经结束的比赛,请发布一个链接到来源,这样那些不想不公平地帮助别人的人就可以贡献。好的,试着想出一种“暴力”算法,它肯定会给出正确的答案,尽管可能不是最有效的方法。请描述一下它的时间复杂度,然后我们将看看可能的改进。提示:想想如何测试给定的子矩形是否满足条件。然后,您可以生成每个可能的子矩形并测试每个子矩形。检查e是否有两个不连续的字母出现是否有效?这可以告诉我这封信是否有两个不同的区域。你所说的不连续是什么意思?例如,如果您的意思是,一行的一部分看起来像
ABA
,这是不够的,因为这两个
a
s可能以其他方式连接(例如,通过下一行中的
AAA
)。