当前位置: 首页 > ai >正文

139. 单词拆分

题目:

在这里插入图片描述

思考:

  1. 其实最先想到的是前缀树
  2. 前缀树难就难在怎么回溯
  3. 代码需要优化

实现:

class PreTree
{
private:PreTree* next[26];bool isEnd;public:PreTree(){isEnd = false;for (int i = 0; i < 26; i++){next[i] = nullptr;}}void insert(string word){PreTree* cur = this;for (int i = 0; i < word.size(); i++){if (cur->next[word[i] - 'a'] == nullptr){cur->next[word[i] - 'a'] = new PreTree();}cur = cur->next[word[i] - 'a'];}cur->isEnd = true;}bool search(string word){bool word_end=false;int end_pos=0;bool flag = true;PreTree* cur = this;for (int i = 0; i < word.size(); i++){if ((cur->next[word[i] - 'a'] == nullptr))    {if (!cur->isEnd){if (word_end){i=end_pos;word_end = false;}else{flag= false;break;}}cur = this;i--;}else{if (cur->isEnd){word_end = true;end_pos = i;}cur = cur->next[word[i] - 'a'];}if (i==word.size()-1){if (!cur->isEnd){if (word_end){cur=this;i=end_pos-1;word_end=false;}else{flag=false;}}}}return flag;}
};class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {PreTree* root = new PreTree();for (auto word:wordDict){root->insert(word);}return root->search(s);}
};

解释:

  1. 前缀树建树过程不赘述
  2. 需要额外注意访问到的前缀树的前缀中是否包含了一个完整的单词:比如{“a”,“aaa”},当前缀树走到aa时注意已经包含了一个完整的“单词(word)”:“a”。这种情况需要额外讨论以及回溯,因为查询aa时,前缀树给出的结果是aa不是一个完整词,但其实aa可以用两个“a”单词组成,这种情况得回溯到前缀树的“a”单词,同样的,s的访问也需要回到相应的位置。
http://www.xdnf.cn/news/14363.html

相关文章:

  • (LeetCode 每日一题) 1432. 改变一个整数能得到的最大差值(贪心)
  • React组件通信——context(提供者/消费者)
  • MySQL常用函数详解之字符串函数
  • nohz_full 参数对内核软硬锁检测机制的影响分析
  • 嵌入式学习笔记 - SH79F6441 堆栈栈顶可以是片上内部RAM(00H-FFH)的任意地址怎么理解
  • (91)课113:存储函数与存储过程的区别总结。
  • DP刷题练习(三)
  • Golang 解大整数乘法
  • Python Pillow 库详解文档
  • pythton 语言的独特语法
  • Axure应用交互设计:多种类型元件实现新增中继器数据
  • 【springcloud】快速搭建一套分布式服务springcloudalibaba(五)
  • Python爬虫实战:研究Mr. Queue相关技术
  • 【Java SE】类和对象(3)
  • Kafka源码P2-生产者缓冲区
  • 基于大模型预测缺铁性贫血的综合技术方案大纲
  • 记录一次 Oracle 表空间不足问题的解决过程
  • Linux进程间通信(上)
  • Proteus8.17-LCD12864液晶屏幕仿真模型
  • 华为OD机试-考勤信息-双指针(JAVA 2025B卷)
  • AI是什么?大模型、语料、训练、推理、机器学习、神经网络等专业名词如何关联
  • 基于docker的nocobase本地部署流程
  • CPU的异常处理
  • PC16550 UART接收中断处理完整示例代码
  • 134-135Elements-UI组件库
  • 03- 六自由度串联机械臂(ABB)动力学分析
  • SoftMax 函数
  • Unity基础-范围检测
  • Redis全面深入学习目录
  • 求数组中最长单调不降连续子数组的长度