algorithm - 如何在矩阵中找到一个单词,其中每个字符都在唯一的行上
问题描述
例如:
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.
推荐阅读
- node.js - nodejs 应用程序在本地运行良好,但不能在线运行
- ubuntu - 从终端启动的 vscode 无法从其终端打开脚本或图形应用程序
- javascript - 在 JavaScript 中访问 Map 对象内的对象和数组
- c# - VS 在使用通用 Blazor 视图的错误列表中显示错误的问题
- spring - 我们可以对 Pig UDF 进行 bean 注入吗
- javascript - 如何在 Javascript/HTML 中存储输入值
- git - 如果我在没有设置用户名和电子邮件地址的情况下进行第一次推送会发生什么?
- java - Bson过滤器MongoDB
- c++ - 如何正确升级您的 OpenMP 版本?
- c - Creating Bidirectional Pipe in C For Both Reading and Writing Using One Pipe (Linux)