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