力扣 单词拆分

在这段代码中,使用unordered_set<string>存储wordDict中的单词是为了实现快速的查找操作。下面是setunordered_setvector之间的区别:

  1. Set(集合)
    • Set 是有序的容器,其中不允许重复的元素。
    • 查找元素的时间复杂度为 O(log n)。
    • 适用于需要有序存储且不允许重复元素的情况。
  1. Unordered_set(无序集合)
    • Unordered_set 是无序的容器,其中不允许重复的元素。
    • 查找元素的时间复杂度为平均 O(1),最坏情况下可达到 O(n)。
    • 适用于不需要有序存储但需要快速查找元素的情况。
  1. Vector(向量)
    • Vector 是有序的动态数组,允许重复元素。
    • 查找元素的时间复杂度为 O(n)。
    • 适用于需要按照插入顺序存储元素,且随机访问元素的情况。

在这段代码中选择使用unordered_set<string>而不是vectorset的原因是,动态规划算法需要频繁地查找一个字符串是否存在于wordDict中,并且不要求有序性,因此选择使用无序集合unordered_set可以在平均情况下以常数时间内完成查找操作,从而提高算法的效率。相比之下,使用set会引入对元素的自动排序,而使用vector则会导致查找操作的时间复杂度变为O(n),效率较低。

综上所述,根据具体需求来选择数据结构是很重要的,无序集合unordered_set适合需要快速查找、不需要有序性的场景。

相当于两个true确定一个单词是否在字典中,这题有点绕

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
   //创建了一个名为wordDictSet的无序集合(unordered_set)
   //()表示创建了一个空的无序集合,
      auto wordDictset=unordered_set<string>();
   for(auto word:wordDict)
   wordDictset.insert(word);
   //dp[i] 表示s的前i位是否可以用wordDict中的单词表示
   auto dp=vector<bool>(s.size()+1,false);
   dp[0]=true;
   //i遍历字符串的所有子串
   for(int i=1;i<=s.size();i++)//表示长度,判l.le.lee.leet.....
   for(int j=0;j<i;j++)
   {//然后j判断被i分解字符串,看截取多大长度能在s中找到
if(dp[j]&&wordDictset.find(s.substr(j,i-j))!=wordDictset.end())
       dp[i]=true;//substr(起始位置,长度)
   }
return dp[s.size()];}};

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苹果苹果梨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值