Algorithm 查找通过翻转列可以获得的2D数组中具有相同字符的最大行数?
您将获得一个M X N 2D数组,该数组只能包含字符“a”或“b”。唯一允许的操作是翻转一列,使该列中的每个“a”都变成“b”,反之亦然。允许任意数量的列翻转。查找只有“a”或“b”的最大行数 输入的第一行将给出矩阵的维度,其余的行将表示矩阵的每一行Algorithm 查找通过翻转列可以获得的2D数组中具有相同字符的最大行数?,algorithm,dynamic-programming,Algorithm,Dynamic Programming,您将获得一个M X N 2D数组,该数组只能包含字符“a”或“b”。唯一允许的操作是翻转一列,使该列中的每个“a”都变成“b”,反之亦然。允许任意数量的列翻转。查找只有“a”或“b”的最大行数 输入的第一行将给出矩阵的维度,其余的行将表示矩阵的每一行 Input: 3 3 a a b b b b b b a Output: 2 说明: 翻转第3列将使第1行仅包含“a”,并使第2行仅包含“b” After flipping column 3: a a a b b a b b b 有人能提供
Input:
3 3
a a b
b b b
b b a
Output:
2
说明:
翻转第3列将使第1行仅包含“a”,并使第2行仅包含“b”
After flipping column 3:
a a a
b b a
b b b
有人能提供这个问题的答案并解释一下吗?提供代码(最好是Java或Python)也会很有帮助
谢谢大家!
k
次相当于翻转它k mod 2
次)。因此,有一组列将恰好翻转一次。其余的柱未被触碰a
,我们应该翻转此行中包含b
的所有列(反之亦然)。这就是为什么每行给我们提供了集合:一组列带有a
,一组列带有b
。很明显,他们从来都不平等a
都被b
替换的字符串,反之亦然)。现在我们只需要找到最频繁的字符串。我们可以使用HashMap
来实现。这是我的密码:
/**
* Computes the complement of the string.
*/
private String getComplement(String string) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < string.length(); i++) {
builder.append(string.charAt(i) == 'a' ? 'b' : 'a');
}
return builder.toString();
}
/**
* Solves the problem for the matrix.
*/
public int getMaxRows(String[] matrix) {
Map<String, Integer> count = new HashMap<>();
for (String row : matrix) {
count.put(row, count.getOrDefault(row, 0) + 1);
String complement = getComplement(row);
count.put(complement, count.getOrDefault(complement, 0) + 1);
}
return Collections.max(count.values());
}
/**
*计算字符串的补码。
*/
私有字符串getcomplete(字符串字符串){
StringBuilder=新的StringBuilder();
对于(int i=0;i
您尝试过这个吗?看到它的代码会很有帮助。@SalmanMohammed不,我还没有实现它。但是它看起来非常简单(例如,在Java中,我们可以使用List
s的HashSet
)。为什么要增加每行的计数值,而不检查该行中有多少个字符是相同的?@SalmanMohammed A row是String。例如,对于您的输入,矩阵
是{“aab”,“bbb”,“bba”}
@SalmanMohammed是什么让您认为它不正确的?你有一个失败的测试用例吗?