您的位置:首页 > 娱乐 > 八卦 > 钓鱼网站怎么做_制作网站参考_常州seo关键词排名_快优吧seo优化

钓鱼网站怎么做_制作网站参考_常州seo关键词排名_快优吧seo优化

2025/4/28 22:29:00 来源:https://blog.csdn.net/s478527548/article/details/147101709  浏览:    关键词:钓鱼网站怎么做_制作网站参考_常州seo关键词排名_快优吧seo优化
钓鱼网站怎么做_制作网站参考_常州seo关键词排名_快优吧seo优化

感觉智商又回来了(松气)。

方法大概是先建立哈希表遍历数组记录每一个字母位置的跨度,然后再遍历数组,每次遇到跨度大于目前长度的字母,就将目前长度延申跨度的长度,然后继续遍历,知道位置已经到长度了,就将长度放入结果容器,将长度重置为1,起始位置重置为下一个字符,继续这些操作。

class Solution {
public:vector<int> partitionLabels(string s) {vector<int> result;unordered_map<char,pair<int,int>> dictionary;for(int i=0;i<s.size();i++){if(dictionary.find(s[i])==dictionary.end()) dictionary[s[i]]=make_pair(i,i);else dictionary[s[i]].second=i;}int start=0;int r=1;for(int i=0;i<s.size();i++){if(dictionary[s[i]].second>start+r-1){r+=dictionary[s[i]].second-start-r+1;}if(i+1==r+start){result.push_back(r);start=i+1;r=1;}}return result;}
};

其实不需要哈希表,用一个数组记录就可以了,而且也不需要记录起始位置和跨度(写完才发现并没有用上),记录每个字母的最后一个位置就可以了。

class Solution {
public:vector<int> partitionLabels(string s) {vector<int> result;int dic[26];memset(dic,0,sizeof(dic));for(int i=0;i<s.size();i++) dic[s[i]-'a']=i;int start=0;int r=1;for(int i=0;i<s.size();i++){if(dic[s[i]-'a']>start+r-1){r+=dic[s[i]-'a']-start-r+1;}if(i+1==r+start){result.push_back(r);start=i+1;r=1;}}return result;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com