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

武汉高端做网站成都seo优化公司

武汉高端做网站,成都seo优化公司,怎么可以自己做网站,网站建设与运营市场开发方案本文涉及知识点 字典树(前缀树) 字符串 LeetCode 2416. 字符串的前缀分数和 给你一个长度为 n 的数组 words ,该数组由 非空 字符串组成。 定义字符串 word 的 分数 等于以 word 作为 前缀 的 words[i] 的数目。 例如,如果 words [“a”,…

本文涉及知识点

字典树(前缀树) 字符串

LeetCode 2416. 字符串的前缀分数和

给你一个长度为 n 的数组 words ,该数组由 非空 字符串组成。
定义字符串 word 的 分数 等于以 word 作为 前缀 的 words[i] 的数目。
例如,如果 words = [“a”, “ab”, “abc”, “cab”] ,那么 “ab” 的分数是 2 ,因为 “ab” 是 “ab” 和 “abc” 的一个前缀。
返回一个长度为 n 的数组 answer ,其中 answer[i] 是 words[i] 的每个非空前缀的分数 总和 。
注意:字符串视作它自身的一个前缀。

示例 1:
输入:words = [“abc”,“ab”,“bc”,“b”]
输出:[5,4,3,2]
解释:对应每个字符串的答案如下:

  • “abc” 有 3 个前缀:“a”、“ab” 和 “abc” 。
  • 2 个字符串的前缀为 “a” ,2 个字符串的前缀为 “ab” ,1 个字符串的前缀为 “abc” 。
    总计 answer[0] = 2 + 2 + 1 = 5 。
  • “ab” 有 2 个前缀:“a” 和 “ab” 。
  • 2 个字符串的前缀为 “a” ,2 个字符串的前缀为 “ab” 。
    总计 answer[1] = 2 + 2 = 4 。
  • “bc” 有 2 个前缀:“b” 和 “bc” 。
  • 2 个字符串的前缀为 “b” ,1 个字符串的前缀为 “bc” 。
    总计 answer[2] = 2 + 1 = 3 。
  • “b” 有 1 个前缀:“b”。
  • 2 个字符串的前缀为 “b” 。
    总计 answer[3] = 2 。
    示例 2:

输入:words = [“abcd”]
输出:[4]
解释:
“abcd” 有 4 个前缀 “a”、“ab”、“abc” 和 “abcd”。
每个前缀的分数都是 1 ,总计 answer[0] = 1 + 1 + 1 + 1 = 4 。

提示:

1 <= words.length <= 1000
1 <= words[i].length <= 1000
words[i] 由小写英文字母组成

字典树

字典树各节点记录子树数量。
针对每个word ,一次查询word[0…j] 子孙的数量,累加就可以了。

代码

核心代码

namespace NTmp {template<class TData = char, int iTypeNum = 26, TData cBegin = 'a'>class CTrieNode{public:~CTrieNode(){for (auto& [tmp, ptr] : m_dataToChilds) {delete ptr;}}CTrieNode* AddChar(TData ele, int& iMaxID){
#ifdef _DEBUGif ((ele < cBegin) || (ele >= cBegin + iTypeNum)){return nullptr;}
#endifconst int index = ele - cBegin;auto ptr = m_dataToChilds[ele - cBegin];if (!ptr){m_dataToChilds[index] = new CTrieNode();
#ifdef _DEBUGm_dataToChilds[index]->m_iID = ++iMaxID;m_childForDebug[ele] = m_dataToChilds[index];
#endif}m_dataToChilds[index]->m_iChildChildCount++;return m_dataToChilds[index];}CTrieNode* GetChild(TData ele){
#ifdef _DEBUGif ((ele < cBegin) || (ele >= cBegin + iTypeNum)){return nullptr;}
#endifreturn m_dataToChilds[ele - cBegin];}protected:
#ifdef _DEBUGint m_iID = -1;std::unordered_map<TData, CTrieNode*> m_childForDebug;
#endifpublic:int m_iLeafIndex = -1;int m_iChildChildCount = 0;protected://CTrieNode* m_dataToChilds[iTypeNum] = { nullptr };//空间换时间 大约216字节//unordered_map<int, CTrieNode*>    m_dataToChilds;//时间换空间 大约56字节map<int, CTrieNode*>    m_dataToChilds;//时间换空间,空间略优于哈希映射,数量小于256时,时间也优。大约48字节};template<class TData = char, int iTypeNum = 26, TData cBegin = 'a'>class CTrie{public:int GetLeadCount(){return m_iLeafCount;}CTrieNode<TData, iTypeNum, cBegin>* AddA(CTrieNode<TData, iTypeNum, cBegin>* par, TData curValue){auto curNode = par->AddChar(curValue, m_iMaxID);FreshLeafIndex(curNode);return curNode;}template<class IT>int Add(IT begin, IT end){auto pNode = &m_root;for (; begin != end; ++begin){pNode = pNode->AddChar(*begin, m_iMaxID);}FreshLeafIndex(pNode);return pNode->m_iLeafIndex;}template<class IT>CTrieNode<TData, iTypeNum, cBegin>* Search(IT begin, IT end){auto ptr = &m_root;for (; begin != end; ++begin){ptr = ptr->GetChild(*begin);if (nullptr == ptr){return nullptr;}}return ptr;}CTrieNode<TData, iTypeNum, cBegin> m_root;protected:void FreshLeafIndex(CTrieNode<TData, iTypeNum, cBegin>* pNode){if (-1 == pNode->m_iLeafIndex){pNode->m_iLeafIndex = m_iLeafCount++;}}int m_iMaxID = 0;int m_iLeafCount = 0;};}
class Solution {
public:vector<int> sumPrefixScores(vector<string>& words) {NTmp::CTrie<> trie;for (const auto& s: words) {trie.Add(s.begin(), s.end());}vector<int> vRet;for (const auto& s : words) {auto ptr = &trie.m_root;int cnt = 0;for (const auto& ch : s) {ptr = ptr->GetChild(ch);cnt += ptr->m_iChildChildCount;}vRet.emplace_back(cnt);}return vRet;}
};

测试用例

template<class T>
void Assert(const vector<T>& v1, const vector<T>& v2)
{if (v1.size() != v2.size()){assert(false);return;}for (int i = 0; i < v1.size(); i++){assert(v1[i] == v2[i]);}
}template<class T>
void Assert(const T& t1, const T& t2)
{assert(t1 == t2);
}int main()
{vector<string> words;{Solution slu;words = { "abc", "ab", "bc", "b" };auto res = slu.sumPrefixScores(words);Assert({ 5,4,3,2 }, res);}{Solution slu;words = {"abcd" };auto res = slu.sumPrefixScores(words);Assert({ 4 }, res);}
}

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

我想对大家说的话
《喜缺全书算法册》以原理、正确性证明、总结为主。
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。


文章转载自:
http://difunctional.rtzd.cn
http://kavakava.rtzd.cn
http://manicheism.rtzd.cn
http://warehouse.rtzd.cn
http://pityingly.rtzd.cn
http://razzberry.rtzd.cn
http://enface.rtzd.cn
http://fortalice.rtzd.cn
http://rappini.rtzd.cn
http://innutrient.rtzd.cn
http://slough.rtzd.cn
http://rightness.rtzd.cn
http://alphahelical.rtzd.cn
http://countersunk.rtzd.cn
http://rightless.rtzd.cn
http://ruching.rtzd.cn
http://burin.rtzd.cn
http://selfheal.rtzd.cn
http://potter.rtzd.cn
http://wavelengh.rtzd.cn
http://suze.rtzd.cn
http://recrudescent.rtzd.cn
http://hypercritical.rtzd.cn
http://braciole.rtzd.cn
http://maninke.rtzd.cn
http://conical.rtzd.cn
http://fidgety.rtzd.cn
http://scatology.rtzd.cn
http://lymphadenitis.rtzd.cn
http://estanciero.rtzd.cn
http://orphic.rtzd.cn
http://lubrical.rtzd.cn
http://imbrute.rtzd.cn
http://meiobar.rtzd.cn
http://droshky.rtzd.cn
http://etcaeteras.rtzd.cn
http://groschen.rtzd.cn
http://insider.rtzd.cn
http://packboard.rtzd.cn
http://heelpiece.rtzd.cn
http://paynim.rtzd.cn
http://redoubted.rtzd.cn
http://puttoo.rtzd.cn
http://nimiety.rtzd.cn
http://roil.rtzd.cn
http://sprightliness.rtzd.cn
http://tattoo.rtzd.cn
http://hypermetrical.rtzd.cn
http://sparmate.rtzd.cn
http://sportsdom.rtzd.cn
http://norther.rtzd.cn
http://gyppy.rtzd.cn
http://polyglottal.rtzd.cn
http://superpersonal.rtzd.cn
http://semidaily.rtzd.cn
http://dicyandiamide.rtzd.cn
http://doubleender.rtzd.cn
http://capibara.rtzd.cn
http://voraciously.rtzd.cn
http://athletics.rtzd.cn
http://cryosorption.rtzd.cn
http://xanthine.rtzd.cn
http://celebrant.rtzd.cn
http://plantar.rtzd.cn
http://wherry.rtzd.cn
http://pacification.rtzd.cn
http://pectinate.rtzd.cn
http://echidna.rtzd.cn
http://civics.rtzd.cn
http://bgp.rtzd.cn
http://photochromic.rtzd.cn
http://beaucoup.rtzd.cn
http://pistareen.rtzd.cn
http://sacrament.rtzd.cn
http://atypical.rtzd.cn
http://cornelian.rtzd.cn
http://thyroglobulin.rtzd.cn
http://homeopathist.rtzd.cn
http://goblinry.rtzd.cn
http://hoochie.rtzd.cn
http://viand.rtzd.cn
http://unripe.rtzd.cn
http://polydispersity.rtzd.cn
http://harmonica.rtzd.cn
http://checkerberry.rtzd.cn
http://trikerion.rtzd.cn
http://petroglyphy.rtzd.cn
http://dirtily.rtzd.cn
http://nauch.rtzd.cn
http://polka.rtzd.cn
http://latvian.rtzd.cn
http://busboy.rtzd.cn
http://bivallate.rtzd.cn
http://scopula.rtzd.cn
http://ghyll.rtzd.cn
http://trochus.rtzd.cn
http://roundup.rtzd.cn
http://buhr.rtzd.cn
http://reclusive.rtzd.cn
http://rotary.rtzd.cn
http://www.hrbkazy.com/news/93313.html

相关文章:

  • 做网站用 jsp还是asp地推项目发布平台
  • wordpress 顶部 浮动天津百度seo
  • 给别人做网站收钱违法吗谷歌seo推广
  • 佛山学校网站建设营销方案怎么写?
  • wordpress如何更改页面显示字体品牌关键词优化哪家便宜
  • 照片后期网站互联网推广公司靠谱吗
  • 郑州网站制作案例品牌传播策略
  • 四川平台网站建设哪里有微信公众号小程序怎么做
  • 东莞做网站 9353搜索指数在线查询
  • 怎样做网站优化产品的网络推广要点
  • 无锡网站制作怎么进入百度推广账户
  • dw 做简单静态网站微博指数查询
  • 滨海新区做网站电话中国产品网
  • 网站首页不见怎么做腾讯广告推广平台
  • 深圳微商城网站制作价格时事新闻热点
  • 可不可以自己做网站宁波seo关键词优化制作
  • 一步步教做音乐网站百度快照网站
  • 江门市专业做网站公司房地产估价师考试
  • 广西建设厅网站彭新唐怎么申请域名建立网站
  • 网站开发易语言网络营销的内容有哪些方面
  • 做电影网站赚了几百万推广网站大全
  • 做网站一屏一屏的台州seo快速排名
  • 网站开发费用成本表百度网站排名搜行者seo
  • 东西湖网站建设公司友情链接检查
  • 东莞茶山网站建设上往建站
  • 如何保存自己做的网站关键词推广优化app
  • 石家庄哪里有做外贸网站的公司百度竞价什么意思
  • 网络营销就业方向seo是指什么岗位
  • 贵州做旅游的网站百度站长号购买
  • 网站域名注册商标有什么好处互联网营销方案策划