当前位置:网站首页>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);
}
}
边栏推荐
- ARM Cortex-A9,MCIMX6U7CVM08AD 处理器应用
- Regular expression integer positive integer some basic expressions
- MySQL "invalid use of null value" solution
- PERT图(工程网络图)
- Verilog implementation of a simple legv8 processor [4] [explanation of basic knowledge and module design of single cycle implementation]
- 搜索框效果的实现【每日一题】
- 杭电oj2054 A == B ? ???
- Arm cortex-a9, mcimx6u7cvm08ad processor application
- Csma/cd carrier monitoring multipoint access / collision detection protocol
- How can the PC page call QQ for online chat?
猜你喜欢

XML文件的解析操作

Evolution of customer service hotline of dewu

Assign a dynamic value to the background color of DataGrid through ivalueconverter
![[fortress machine] what is the difference between cloud fortress machine and ordinary fortress machine?](/img/fb/17e029b1d955965d7e2e0f58701d91.png)
[fortress machine] what is the difference between cloud fortress machine and ordinary fortress machine?

最长上升子序列模型 AcWing 482. 合唱队形

Battle Atlas: 12 scenarios detailing the requirements for container safety construction

Transferring files between VMware and host

2022-7-7 Leetcode 34. Find the first and last positions of elements in a sorted array

Vscode configuration uses pylint syntax checker

Flask session forged hctf admin
随机推荐
Attribute keywords aliases, calculated, cardinality, ClientName
Introduction to database system - Chapter 1 introduction [conceptual model, hierarchical model and three-level mode (external mode, mode, internal mode)]
【立体匹配论文阅读】【三】INTS
Is it safe to open an account online now? Which securities company should I choose to open an account online?
最长上升子序列模型 AcWing 482. 合唱队形
Environment configuration
What are the principles for distinguishing the security objectives and implementation methods that cloud computing security expansion requires to focus on?
3D detection: fast visualization of 3D box and point cloud
PERT图(工程网络图)
Take you to master the three-tier architecture (recommended Collection)
Dry goods | summarize the linkage use of those vulnerability tools
Mysql怎样控制replace替换的次数?
mysql ”Invalid use of null value“ 解决方法
手里的闲钱是炒股票还是买理财产品好?
UML 状态图
Interface automation test - solution of data dependency between interfaces
AutoCAD - how to input angle dimensions and CAD diameter symbols greater than 180 degrees?
UML sequence diagram (sequence diagram)
Vmware 与主机之间传输文件
Did login metamask