algorithm - 如何在矩阵中找到一个单词,其中每个字符都在唯一的行上

标签 algorithm matrix

例如:

row1 [ a y e m a ]
row2 [ l i t a p ]
row3 [ i y n a t ]

现在单词“may”是可能的,因为“m”在第 1 行,“a”在第 2 行,“y”在第“3”行

但是,'tin' 是不可能的,因为 i 和 t 有一个共同的行。

注意:输入字符不必按行顺序排列。 tin 也可以是输入中的 int。假设字符数与矩阵中的行数相同。

简化版: 假设输入单词中没有字符重复(例如:may、tin)

复杂版本: 字符可以重复:(例如:tat)

最佳答案

    // row1 [ a y e m a ]
// row2 [ l i t a p ]
// row3 [ i y n a t ]
//i would try to remap your data to something like
var data  = new List<char>[255];

for(var i in in rows){
    for(for j in rows[i]){
        var ch =rows[i][j]// a,b,c,d 
        if(data[ch]==null){
            data[ch] = new List<int>()
        }

        data[ch].add(i); // fill in row numbers here for every character
    }
}
// you will have an array were you can find any character in constant time O(1)
[a] = [row1, row2,row3, row1];
[b] = null;
[m] = [row1]
[y] = [row1,row3]
[t] = row3
[i] = row2
[n] = row3

//after you can try to find all rownumbers and check for uniquiness
var hs = new HashSet<int>();
hs.addAll(data[m]);
hs.addAll(data[a]);
hs.addAll(data[y]);
//in C# hs will contain only unique values
hs = [row1, row2,row3]
return hs.length>="may".length;

//instead of hashset we can use groupby for cases like tat, taa etc.

关于algorithm - 如何在矩阵中找到一个单词,其中每个字符都在唯一的行上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53964204/

相关文章:

c++ - 基于非密度的数据聚类算法

c++ - "Splitting"常数时间内的矩阵

java - 拆分矩阵中的二进制值

c++ - 在方阵中,每个单元格都是黑色或白色。设计一个算法来找到最大子正方形,使得所有 4 个边框都是黑色

algorithm - 如何实现混凝土红青浮雕眼镜显示器的红色和青色校准程序?

java - 如何检查矩阵是否反对称

python - 将矩阵转换为特定格式的原始字节

Android - 当 activity.setContentView 完成渲染时是否触发了任何事件?

生成随机数字字符串的算法,长度为 10,000 个字符?

algorithm - 列出总和为常量数字的所有可能数字组合的快速方法