leetcode work_break

Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s =“leetcode”,
dict =[“leet”, “code”].
Return true because"leetcode"can be segmented as"leet code".

class Solution {
public:
    bool wordBreak(string s, unordered_set<string> &dict) {
        int len = s.size();
        if(s.size() == 0) return false;
        vector<bool> dp(len + 1, false);
        dp[len] = true;
        
        for(int i = len - 1; i >= 0; i--)
        {
            for(int j = i; j < len; j++)
            {
                string substr = s.substr(i, j - i + 1);
                if(dict.find(substr) != dict.end() && dp[j+1] == true)
                {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[0];
    }
};
### C++ 软件工程设计师面试常见问题及准备技巧 #### 一、常见的 C++ 面试题型 C++ 是一门复杂的编程语言,在软件工程设计领域,其面试通常会涉及以下几个方面: 1. **基础知识** - 数据类型的定义及其范围。 - 指针与引用的区别以及它们的用途[^1]。 2. **面向对象特性** - 继承、多态的概念及其实现方式。 - 抽象类的作用和虚函数表的工作原理[^3]。 3. **模板与泛型编程** - STL 的基本组件(容器、迭代器、算法)及其使用方法。 - 如何利用模板提高代码复用性并减少冗余。 4. **内存管理** - 动态分配内存的方式(new/delete),智能指针(shared_ptr, unique_ptr)的应用场景。 5. **并发处理** - 多线程环境下如何保护共享资源(互斥锁mutex, 条件变量condition_variable)。 - 线程池的设计思路及其优缺点分析[^4]。 6. **网络通信** - TCP 和 UDP 协议的主要差异在于可靠性保障上;前者提供了完整的握手确认过程而后者则不具备此功能。 - Socket 编程模型下客户端和服务端交互流程解析[^2]。 #### 二、最佳实践建议 为了更好地应对上述各类题目类型,可以从以下几个维度着手准备: - **理论夯实**: 对于每一个知识点都要做到知其然更知所以然的程度。比如理解为什么需要虚拟继承来解决菱形继承中的钻石问题。 - **项目积累**: 结合实际工程项目经历去复习相关技术点。如果曾经参与过某个基于C++开发的大规模分布式系统,则可以围绕该项目提炼出多个潜在考点作为重点突破方向。 - **刷题演练**: 利用LeetCode,HackerRank等平台上的专项练习集进行针对性训练。特别是那些高频出现的经典案例应该反复琢磨直至完全掌握为止。 - **模拟面谈**: 找同行或者导师帮忙扮演面试官角色开展全真模拟测试环节。这样不仅能够锻炼临场发挥能力还能及时发现自身薄弱之处加以改进。 #### 示例代码展示 以下是关于创建简单线程池的一个例子: ```cpp #include <iostream> #include <vector> #include <queue> #include <thread> #include <functional> #include <atomic> #include <future> class ThreadPool { public: explicit ThreadPool(size_t threads): stop(false){ for(size_t i=0;i<threads;++i) workers.emplace_back([this]{ this->work(); }); } template<class F,class... Args> auto enqueue(F&& f,Args&&... args)->std::future<decltype(f(args...))>{ using return_type = decltype(f(args...)); auto task = std::make_shared<std::packaged_task<return_type()>>(std::bind(std::forward<F>(f),std::forward<Args>(args)...)); std::unique_lock<std::mutex> lock(queue_mutex); tasks.push([task](){ (*task)(); }); condition.notify_one(); return task->get_future(); } ~ThreadPool(){ { std::unique_lock<std::mutex> lock(queue_mutex); stop=true; } condition.notify_all(); for(auto& worker :workers)worker.join(); } private: void work(){ while(true){ std::function<void()> task; { std::unique_lock<std::mutex> lock(queue_mutex); condition.wait(lock,[this]{ return stop || !tasks.empty(); }); if(stop && tasks.empty()) break; task=std::move(tasks.front()); tasks.pop(); } task(); } } std::vector<std::thread> workers; std::queue<std::function<void()>> tasks; std::mutex queue_mutex; bool stop; std::condition_variable condition; }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值