当前位置:网站首页>LeetCode 648. 单词替换
LeetCode 648. 单词替换
2022-07-07 12:15:00 【Sasakihaise_】
【哈希+字符串处理】将dictionary中的单词放到HashSet中,在添加过程中记录单词的长度,方便对sentence中的单词取前缀。
class Solution {
// 哈希+字符串截取 12:41
public String replaceWords(List<String> dictionary, String sentence) {
Set<String> set = new HashSet();
Set<Integer> length = new HashSet();
for (var st: dictionary) {
set.add(st);
length.add(st.length());
}
List<Integer> l = new ArrayList(length);
Collections.sort(l);
String[] strs = sentence.split(" ");
int n = l.size();
StringBuilder sb = new StringBuilder();
for (var str: strs) {
sb.append(" ");
var flag = 0;
for (var i = 0; i < n; i++) {
var m = l.get(i);
if (m >= str.length()) {
break;
} else {
var st = str.substring(0, m);
if (set.contains(st)) {
flag = 1;
sb.append(st);
break;
}
}
}
if (flag == 0) {
sb.append(str);
}
}
return sb.toString().strip();
}
}
【字典树】对dictionary中的单词建树,遍历sentence中的单词,最先匹配到的前缀返回即可。
class Solution {
// 字典树 1:15 33
class Trie {
Trie[] map = new Trie[26];
boolean is_end;
}
Trie root = new Trie();
public void add(String str) {
Trie node = root;
for (var i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (node.map[c - 'a'] != null) {
node = node.map[c - 'a'];
} else {
Trie trie = new Trie();
node.map[c - 'a'] = trie;
node = trie;
}
}
node.is_end = true;
}
public String pre(StringBuilder sb, String str) {
Trie node = root;
for (var i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (node.map[c - 'a'] == null) {
return str;
} else {
sb.append(c);
node = node.map[c - 'a'];
if (node.is_end) {
return sb.toString();
}
}
}
return str;
}
public String replaceWords(List<String> dictionary, String sentence) {
for (var str: dictionary) {
add(str);
}
String[] strs = sentence.split(" ");
StringBuilder sb = new StringBuilder();
for (var str: strs) {
sb.append(pre(new StringBuilder(), str));
sb.append(" ");
}
return sb.toString().strip();
}
}
【字典树+哈希表写法】
class Solution {
// 字典树 10:05 10:16
class Trie {
Map<Character, Trie> map = new HashMap();
boolean endOfWord = false;
}
Trie root = new Trie();
public void add(String str) {
Trie node = root;
for (var i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (node.map.containsKey(c)) {
node = node.map.get(c);
} else {
Trie trie = new Trie();
node.map.put(c, trie);
node = trie;
}
}
node.endOfWord = true;
}
public String prefix(String str) {
Trie node = root;
StringBuilder sb = new StringBuilder();
for (var i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (node.map.containsKey(c)) {
sb.append(c);
node = node.map.get(c);
if (node.endOfWord) {
return sb.toString();
}
} else {
return str;
}
}
return str;
}
public String replaceWords(List<String> dictionary, String sentence) {
for (var str: dictionary) {
add(str);
}
String strs[] = sentence.split(" ");
for (var i = 0; i < strs.length; i++) {
strs[i] = prefix(strs[i]);
}
return String.join(" ", strs);
}
}
边栏推荐
- 【网络安全】sql注入语法汇总
- GVIM [III] [u vimrc configuration]
- UML sequence diagram (sequence diagram)
- IP address home location query
- docker部署oracle
- 高等数学---第八章多元函数微分学1
- First choice for stock account opening, lowest Commission for stock trading account opening, is online account opening safe
- oracle 非自动提交解决
- 内存溢出和内存泄漏的区别
- The reason why data truncated for column 'xxx' at row 1 appears in the MySQL import file
猜你喜欢
2022-7-6 sigurg is used to receive external data. I don't know why it can't be printed out
Help tenants
Use day JS let time (displayed as minutes, hours, days, months, and so on)
[Reading stereo matching papers] [III] ints
Vmware 与主机之间传输文件
UML sequence diagram (sequence diagram)
Introduction to sakt method
高等数学---第八章多元函数微分学1
SAKT方法部分介绍
通过 iValueConverter 给datagrid 的背景颜色 动态赋值
随机推荐
PHP中用下划线开头的变量含义
Lavarel之环境配置 .env
高等数学---第八章多元函数微分学1
MySQL "invalid use of null value" solution
IP address home location query full version
Excuse me, why is it that there are no consumption messages in redis and they are all piled up in redis? Cerely is used.
Introduction to database system - Chapter 1 introduction [conceptual model, hierarchical model and three-level mode (external mode, mode, internal mode)]
[fortress machine] what is the difference between cloud fortress machine and ordinary fortress machine?
When FC connects to the database, do you have to use a custom domain name to access it outside?
2022-7-7 Leetcode 844. Compare strings with backspace
Is it safe to open an account online now? Which securities company should I choose to open an account online?
How to check the ram and ROM usage of MCU through Keil
[daily training] 648 Word replacement
Vmware 与主机之间传输文件
請問,在使用flink sql sink數據到kafka的時候出現執行成功,但是kafka裏面沒有數
Environment configuration
PC端页面如何调用QQ进行在线聊天?
PERT图(工程网络图)
Excusez - moi, l'exécution a été réussie lors de l'utilisation des données de puits SQL Flink à Kafka, mais il n'y a pas de nombre dans Kafka
高等數學---第八章多元函數微分學1