当前位置:网站首页>648. 单词替换
648. 单词替换
2022-07-07 17:07:00 【anieoo】
原题链接:648. 单词替换
solution:
哈希表存储前缀,暴力算法进行比较,O(n^2)
class Solution {
public:
unordered_map<string, int> dict; //存储单词前缀
string replaceWords(vector<string>& dictionary, string sentence) {
string res; //返回值
for(auto &x : dictionary) dict[x]++;
vector<string> words = split(sentence, ' ');
for(auto &word : words) {
for(int i = 0;i < word.size();i++) {
string tmp = word.substr(0, i + 1);
if(dict[tmp]) {
word = tmp;
break;
}
}
}
for(int i = 0;i < words.size();i++) {
res += words[i];
if(i != words.size() - 1) res += ' ';
}
return res;
}
//字符串分割函数
vector<string> split(string word, char t) {
vector<string> res; //返回值
int n = word.size();
for(int i = 0;i < n;i++) {
int j = i;
string item;
while(j < n && word[j] != t) item += word[j++];
i = j;
res.push_back(item);
}
return res;
}
};
trie树
const int N = 1e5 + 10;
class Solution {
public:
int son[N][26], cnt[N], idx; //建立字典树
void add(string word) {
int p = 0;
for(int i = 0;i < word.size();i++) {
int u = word[i] - 'a';
if(!son[p][u]) son[p][u] = ++idx;
p = son[p][u];
}
cnt[p]++; //以p结尾的单词+1
}
string find(string word) {
int p = 0;
for(int i = 0;i < word.size();i++) {
int u = word[i] - 'a';
if(cnt[p]) return word.substr(0, i); //如果出现前缀则替换
if(!son[p][u]) break; //如果不存在前缀则,break
p = son[p][u];
}
return word;
}
//字符串分割函数
vector<string> split(string word, char t) {
vector<string> res; //返回值
int n = word.size();
for(int i = 0;i < n;i++) {
int j = i;
string item;
while(j < n && word[j] != t) item += word[j++];
i = j;
res.push_back(item);
}
return res;
}
string replaceWords(vector<string>& dictionary, string sentence) {
for(auto &word : dictionary) add(word); //建立字典树
vector<string> words = split(sentence, ' ');
string res; //定义返回值
for(int i = 0;i < words.size();i++) {
string tmp = find(words[i]);
res += tmp;
if(i != words.size() - 1) res += ' ';
}
return res;
}
};
边栏推荐
- POJ 2392 Space Elevator
- String - string (Lua)
- How much does it cost to develop a small program mall?
- 链式二叉树的基本操作(C语言实现)
- 數據驗證框架 Apache BVal 再使用
- 超分辨率技术在实时音视频领域的研究与实践
- SD_ DATA_ SEND_ SHIFT_ REGISTER
- [HDU] 5248 sequence transformation (greedy + dichotomy) [recommended collection]
- 编译原理 实验一:词法分析器的自动实现(Lex词法分析)
- Zhong Xuegao wants to remain innocent in the world
猜你喜欢
PV static creation and dynamic creation
Complete e-commerce system
前首富,沉迷种田
State mode - Unity (finite state machine)
I feel cheated. Wechat tests the function of "size number" internally, and two wechat can be registered with the same mobile number
Pasqal首席技术官:模拟量子计算率先为工业带来量子优势
Cadre de validation des données Apache bval réutilisé
Micro service remote debug, nocalhost + rainbow micro service development second bullet
Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布
Basic operation of chain binary tree (implemented in C language)
随机推荐
我感觉被骗了,微信内测 “大小号” 功能,同一手机号可注册两个微信
杰理之关于 TWS 声道配置【篇】
杰理之快速配对,不支持取消配对【篇】
博睿数据入选《2022爱分析 · IT运维厂商全景报告》
6.关于jwt
State mode - Unity (finite state machine)
Seize Jay Chou
二叉树的基本概念和性质
前首富,沉迷种田
How many are there (Lua)
Multimodal point cloud fusion and visual location based on image and laser
手把手教姐姐写消息队列
鸿蒙智能家居【1.0】
嵌入式面试题(算法部分)
抢占周杰伦
编译原理 实验一:词法分析器的自动实现(Lex词法分析)
超分辨率技术在实时音视频领域的研究与实践
Flipping game (enumeration)
Classification and application of enterprise MES Manufacturing Execution System
RISCV64