这是一个分而治之的算法吗



我正在为类做一个程序,给定一个字符串获得由连续的{辅音,元音}模式组成的最长子串,但我被要求以分而治之的方式来做。这是我的算法,但我不知道它是否是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;
}

否,除法&征服范式通常有以下精确步骤:

  1. 将较大的问题划分为较小的子问题。

  2. 征服有征服和合并步骤,在这些步骤中,你试图解决你无法进一步划分的基本(原子(问题,并继续合并它们。

在您给出的代码中,没有涉及除法步骤。您只通过字符串中的两个连续字符,并继续跟踪最长的字符,直到第i个位置。这类似于通过给定的数组,保留max变量,并在需要时更新它。

也许这个问题是为了划分并遍历所有两个长度的子字符串(原子问题(,检查连续字符是否符合要求,并在组合时适当地增加"计数"。

最新更新