微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决这是一个分而治之的算法吗?

我正在为班级编写一个程序,该程序获取由连续{辅音,元音}模式组成的最长子串,但​​我被要求以分而治之的方式进行。这是我的算法,但我不知道它是否是 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. 将较大的问题分解为较小的子问题。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。