本文主要是介绍划分字母区间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
划分字母区间
思路:
我觉得这道题最关键的一个思路就是,对于没一个字母,你一定要找到他的最后一次出现的位置,每一个片段必须要比这个大,然后该字符到这个end中其他的字符,也都要找到最后一次出现的位置,这个片段一定也要比这个大,然后我们遍历到这个片段里最大的最后一次出现的位置时候,就可以记录片段长度了,这个长度是符合题目意思的。
第一个思路:记录每个字符的第一次出现位置和最后一次出现位置,之后这题就和 56 .合并区间 完全一样的做法。
第二个思路:记录每个字母的结束位置。
代码:
class Solution {
public:vector<int> partitionLabels(string s) {vector<int> ans;unordered_map<char,int> m; //记录每个字符的的最后一次出现的位置for (int i = 0; i < s.size(); i ++) {m[s[i]] = i;}int start=0,end=0;//start用来维护每一段的起点,end用来维护每一段的终点for(int i=0;i<s.size();i++){end=max(end,m[s[i]]);if(i==end){ans.push_back(end-start+1);start=i+1;}}return ans;}
};
这篇关于划分字母区间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!