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

营销型外贸网站制作社群营销方案

营销型外贸网站制作,社群营销方案,赣州做网站公司,做网站连带责任代码学习总结(一) 这个系列的博客是记录下自己学习代码的历程,有来自平台上的,有来自笔试题回忆的,主要基于 C 语言,包括题目内容,代码实现,思路,并会注明题目难度&…

代码学习总结(一)

这个系列的博客是记录下自己学习代码的历程,有来自平台上的,有来自笔试题回忆的,主要基于 C++ 语言,包括题目内容,代码实现,思路,并会注明题目难度,保证代码运行结果

1 最长公共前缀

简单 字典树 匹配

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。

示例输入输出 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”

示例输入输出 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 如果非空,则仅由小写英文字母组成

思路解析:

  1. 把第一个字符串作为基准,然后把它和第二个进行匹配,把二者的公共前缀取出来
  2. 把基准替换为公共前缀,分别和其他的字符串进行比较,再把新的公共替换为基准
  3. 返回最终的基准
开始
strs是否为空?
返回空字符串
设置prefix为strs_0
初始化i = 1
i < strs.size?
返回prefix
初始化j = 0
j < prefix.size 且 j < strs_i.size 且 prefix_j == strs_i_j?
j加1
截断prefix: prefix = prefix.substr_0_j
prefix是否为空?
i加1

本地 debug 代码

#include <iostream>
#include <vector>
#include <string>using namespace std;string longestCommonPrefix(vector<string>& strs) {if (strs.empty()) return "";// 取第一个字符串作为基准string prefix = strs[0];// 从第二个字符串开始比较for (int i = 1; i < strs.size(); ++i) {int j = 0;// 比较当前前缀和 strs[i] 的公共部分while (j < prefix.size() && j < strs[i].size() && prefix[j] == strs[i][j]) {++j;}// 截断前缀prefix = prefix.substr(0, j);// 如果公共前缀为空,直接返回if (prefix.empty()) return "";}return prefix;
}// 测试用例
int main() {vector<string> strs1 = {"flower", "flow", "flight"};vector<string> strs2 = {"dog", "racecar", "car"};cout << "示例 1 输出: " << longestCommonPrefix(strs1) << endl; // 输出: "fl"cout << "示例 2 输出: " << longestCommonPrefix(strs2) << endl; // 输出: ""return 0;
}

上述代码的运行结果为

project cover 代码运行结果1

可用于提交的代码

string longestCommonPrefix(vector<string>& strs) {if (strs.empty()) return "";// 取第一个字符串作为基准string prefix = strs[0];// 从第二个字符串开始比较for (int i = 1; i < strs.size(); ++i) {int j = 0;// 比较当前前缀和 strs[i] 的公共部分while (j < prefix.size() && j < strs[i].size() && prefix[j] == strs[i][j]) {++j;}// 截断前缀prefix = prefix.substr(0, j);// 如果公共前缀为空,直接返回if (prefix.empty()) return "";}return prefix;
}

2 单词拆分 II

中等 字典树 单词拆分

给定一个字符串 s s s 和一个字符串字典 wordDict ,在字符串 s s s 中增加空格来构建一个句子,使得句子中所有的单词都在词典中。以任意顺序 返回所有这些可能的句子。

注意:词典中的同一个单词可能在分段中被重复使用多次。

示例输入输出 1:
输入: s = “catsanddog”, wordDict = [“cat”,“cats”,“and”,“sand”,“dog”]
输出: [“cats and dog”,“cat sand dog”]

示例 2:

输入: s = “pineapplepenapple”, wordDict = [“apple”,“pen”,“applepen”,“pine”,“pineapple”]
输出: [“pine apple pen apple”,“pineapple pen apple”,“pine applepen apple”]
解释: 注意你可以重复使用字典中的单词。

示例 3:
输入: s = “catsandog”, wordDict = [“cats”,“dog”,“sand”,“and”,“cat”]
输出 :[]

思路解析:

  1. 由于需要寻找同一个字符串在某个给定字典下所有可能的单词组合,所以最好是使用递归解决
  2. 而为了方便搜索,可以将给定字典转化为无序字典,并使用一个单独的字典用来存储已经搜索出的结果
  3. 这里的递归对象因为是一个字符串,所以可以从左开始搜索,拿到第一个成型的单词后,将右侧的部分作为新的对象,进行递归,然后把左侧的单词压入结果字典中
开始
初始化字典和记忆化搜索
调用 dfs 函数
memo 中是否存在 s?
返回 memo_s
初始化结果集 result
字典中是否存在 s?
将 s 加入 result
初始化 i = 1
i < s.size?
将 result 存入 memo_s
截取 left 和 right
字典中是否存在 left?
i 加 1
递归处理 right 部分
遍历 rightPart 结果
将 left + '' + sub 加入 result
返回 result
打印结果
结束

本地 debug 代码

#include <iostream>
#include <vector>
#include <string>
#include <unordered_set>
#include <unordered_map>using namespace std;class Solution {
public:vector<string> wordBreak(string s, vector<string>& wordDict) {unordered_set<string> dict(wordDict.begin(), wordDict.end()); // 初始化无序集合unordered_map<string, vector<string>> memo; // 初始化记忆化搜索return dfs(s, dict, memo);}private:vector<string> dfs(const string& s, unordered_set<string>& dict,unordered_map<string, vector<string>>& memo) {// 因为memo 是空的,所以如果 s 存在于这个空的变量中,它也是空的if (memo.count(s)) return memo[s];// 如果整个输入都存在于字典中,那直接返回vector<string> result;if (dict.count(s)) {result.push_back(s);}// 针对字符串本身进行搜索for (int i = 1; i < s.size(); ++i) {string left = s.substr(0, i); // 往左搜索,字符的左侧部分string right = s.substr(i); // 往右搜索,字符的右侧部分if (dict.count(left)) { //如果左侧部分存在于字典中vector<string> rightPart = dfs(right, dict, memo); // 递归对右侧部分进行处理for (const string& sub : rightPart) {result.push_back(left + " " + sub); // 将左侧部分和右侧部分都压入到结果中}}}memo[s] = result;return result;}
};void printResults(const std::vector<std::string>& results) {std::cout << "[";for (size_t i = 0; i < results.size(); ++i) {std::cout << "\"" << results[i] << "\"";if (i != results.size() - 1) {std::cout << ",";}}std::cout << "]" << std::endl;
}// 测试用例
int main() {Solution sol;string s1 = "catsanddog";vector<string> wordDict1 = {"cat","cats","and","sand","dog"};string s2 = "pineapplepenapple";vector<string> wordDict2 = {"apple","pen","applepen","pine","pineapple"};string s3 = "catsandog";vector<string> wordDict3 = {"cats","dog","sand","and","cat"};vector<string> results1 = sol.wordBreak(s1, wordDict1);printResults(results1); // 输出: ["cats and dog","cat sand dog"]vector<string> results2 = sol.wordBreak(s2, wordDict2);printResults(results2); // 输出: ["pine apple pen apple","pineapple pen apple","pine applepen apple"]vector<string> results3 = sol.wordBreak(s3, wordDict3);printResults(results3); // 输出: []return 0;
}

上述代码的运行结果为

project cover 代码运行结果2

可用于提交的代码

class Solution {
public:vector<string> wordBreak(string s, vector<string>& wordDict) {unordered_set<string> dict(wordDict.begin(), wordDict.end()); // 初始化无序集合unordered_map<string, vector<string>> memo; // 初始化记忆化搜索return dfs(s, dict, memo);}private:vector<string> dfs(const string& s, unordered_set<string>& dict,unordered_map<string, vector<string>>& memo) {// 因为memo 是空的,所以如果 s 存在于这个空的变量中,它也是空的if (memo.count(s)) return memo[s];// 如果整个输入都存在于字典中,那直接返回vector<string> result;if (dict.count(s)) {result.push_back(s);}// 针对字符串本身进行搜索for (int i = 1; i < s.size(); ++i) {string left = s.substr(0, i); // 往左搜索,字符的左侧部分string right = s.substr(i); // 往右搜索,字符的右侧部分if (dict.count(left)) { //如果左侧部分存在于字典中vector<string> rightPart = dfs(right, dict, memo); // 递归对右侧部分进行处理for (const string& sub : rightPart) {result.push_back(left + " " + sub); // 将左侧部分和右侧部分都压入到结果中}}}memo[s] = result;return result;}
};void printResults(const std::vector<std::string>& results) {std::cout << "[";for (size_t i = 0; i < results.size(); ++i) {std::cout << "\"" << results[i] << "\"";if (i != results.size() - 1) {std::cout << ",";}}std::cout << "]" << std::endl;
}

这里的题目是 leetcode 中的,感兴趣的同学们可以去提交下试试,可以直接运行通过,每日二题,努力加油😉!!!

http://www.dtcms.com/wzjs/53434.html

相关文章:

  • wordpress自定义分类法常州seo外包
  • 百度联盟怎么做自己的网站线上广告投放方式
  • 有哪些网站是做红酒批发的百度推广可以自己开户吗
  • 做网站公司那家好网站设计模板网站
  • 网站宣传与推广百度推广电话销售好做吗
  • 二维码生成器在线制作方法杭州seo哪家好
  • 建立自己的网站怎么样做广西网站seo
  • 网站内的地图导航怎么做如何宣传网站
  • 有源码怎么搭建网站常州百度推广代理公司
  • 圣诞网站怎么做深圳最新疫情
  • ps怎么做网站页面seo优化是什么意思
  • 网站创建流程包括哪些步骤最新做做网站
  • 常见的简单的网站制作中国人民银行网站
  • 替别人做设计的网站seo推广软件代理
  • 制作一个有用户网站网站目录
  • 网站推广新手入门教程建站网站
  • 网站定制开发收费标准是多少百度电脑版
  • 深圳建设网站跨境电商seo什么意思
  • 技术支持 网站建设产品关键词怎么找
  • 用软件什么做网站杭州网站设计公司
  • 电子专业毕设做网站网络推广吧
  • 怎么做垂直网站线上如何推广自己的产品
  • 2018年网站建设工作总结接app推广
  • 汕头 做网站如何自己做一个网页
  • 广东网站建设价格搜索引擎都有哪些
  • 在自己网站做支付可以吗站长工具站长
  • 如何搭建网站慈溪seo
  • 婚庆公司网站建设策划书.doc南京百度
  • 网站建设 ui 企业网站天津网站建设优化
  • 提供网站建设服务的网站价格淘宝代运营1个月多少钱