如何解决这是一个分而治之的算法吗?
我正在为班级编写一个程序,该程序获取由连续{辅音,元音}模式组成的最长子串,但我被要求以分而治之的方式进行。这是我的算法,但我不知道它是否是 D&V 算法。如果不是,我该如何修改它?
int cadenaMasLargaDeVC(string str) {
int n = str.size();
string strRes,strTmp = "";
int posRes = 0;
set<char> st;
st.insert('a');
st.insert('e');
st.insert('i');
st.insert('o');
st.insert('u');
for(int i = 0; i<n; i++){
cout << i << " ";
if(st.find(str[i]) == st.end() && st.find(str[i+1]) != st.end()){
strTmp += string(str[i]) + str[i+1];
i++;
} else{
strTmp = "";
}
if(strTmp.size() > strRes.size()){
strRes = strTmp;
posRes = i - strRes.size() + 2;
}
if(strRes.size() > (n-i)) break;
}
cout << strRes << endl;
return posRes;
}
解决方法
不,分而治之的范式通常具有以下精确步骤:
-
将较大的问题分解为较小的子问题。
在您提供的代码中,不涉及除法步骤。您只通过字符串中的两个连续字符并继续跟踪最长的时间,直到第 i 个位置。这类似于传递给定数组并保留 max 变量并在需要时更新它。
也许这个问题是为了划分并遍历所有两个长度的子字符串(原子问题),检查是否连续字符在询问的方式中,并在组合时适当地增加“计数”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。