当前位置:网站首页>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;
}
};
边栏推荐
- [information security laws and regulations] review
- Redis
- How many are there (Lua)
- 如何给“不卖笔”的晨光估值?
- Calculation of torque target value (ftorque) in servo torque control mode
- Basic concepts and properties of binary tree
- Learn open62541 -- [67] add custom enum and display name
- ip netns 命令(备忘)
- 抢占周杰伦
- Golang client server login
猜你喜欢
随机推荐
【牛客网刷题系列 之 Verilog进阶挑战】~ 多bit MUX同步器
LeetCode 890(C#)
6. About JWT
POJ 1182 :食物链(并查集)[通俗易懂]
杰理之测试盒配置声道【篇】
杰理之快速配对,不支持取消配对【篇】
Numpy——2.数组的形状
炒股如何开户?请问一下手机开户股票开户安全吗?
Antisamy: a solution against XSS attack tutorial
10 schemes to ensure interface data security
PTA 1101 B是A的多少倍
3.关于cookie
Micro service remote debug, nocalhost + rainbow micro service development second bullet
How to implement safety practice in software development stage
虚拟数字人里的生意经
Key points of anti reptile: identifying reptiles
testing and SQA_动态白盒測试[通俗易懂]
Numpy——2. Shape of array
ES6笔记一
Mathematical analysis_ Notes_ Chapter 11: Fourier series