问题描述
我正在为班级编写一个程序,该程序获取由连续{辅音,元音}模式组成的最长子串,但我被要求以分而治之的方式进行。这是我的算法,但我不知道它是否是 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 变量并在需要时更新它。
也许这个问题是为了划分并遍历所有两个长度的子字符串(原子问题),检查是否连续字符在询问的方式中,并在组合时适当地增加“计数”。