如何解决cpp中具有重复字符的最长子串
在我最近的一次采访中,我被问到了如下问题-
将字符串分成具有重复字符的子串,使得
示例 1
Input : ababccdecfg
Output : [abab,ccdec,f,g]
示例 2
Input : bbbb
Output : [bbbb]
示例 3
Input : abcd
Output : [a,b,c,d]
函数的签名是
std::vector<std::string> Split(std::string str)
{ //write code here }
最初,我尝试使用滑动窗口然后使用递归来处理它。我想得越多,就越复杂,最终我放弃了。
我正在寻找有关如何处理它的建议。任何帮助表示赞赏。谢谢。
解决方法
std::vector<std::string> Split(std::string str){
std::vector<std::string> ans;
std::vector<int> freq(26,0);
int i=0,n = (int)str.size();
for(int i=0;i<n;i++){
freq[str[i]-'a']=i;
}
while(i<n){
std::string temp = "";
int m = freq[str[i]-'a'];
temp.push_back(str[i]);
i++;
while(i<=m){
temp.push_back(str[i]);
m=max(m,freq[str[i]-'a']);
i++;
}
ans.push_back(temp);
}
return ans;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。