貼兩個演算法:分割字串(strsplit) 和 求最長遞減子序列(FindLDS),並附執行個體。(已更新)

來源:互聯網
上載者:User
1、分割字串(strsplit)

函式宣告:vector<string> strsplit( const string str, const string delim );

參數:
    str為待分割的字串
    delim為分隔字元的集合,注意:對"abcdeafghbi",如果delim是"abd",則結果是"c","e","fgh","i"

傳回值:
    被分割後的子字串向量

定義:vector<string> strsplit( const string str, const string delim )
{
    int cutAt;
    
    string lstr = str;
    vector<string> result;
    
    while( (cutAt = lstr.find_first_of(delim)) != lstr.npos )
    {
        if(cutAt > 0)
        {
            result.push_back(lstr.substr(0,cutAt));
        }
        
        lstr = lstr.substr(cutAt+1);
    }
    
    if(lstr.length() > 0)
    {
        result.push_back(lstr);
    }
    
    return result;
}

2、求最長遞減子序列(FindLDS)

函式宣告:template<class T>
void FildLDS(const vector<T> seq, const int ipos, vector<vector<int> > &results );

參數:
    seq為待求值的序列,可謂任何具有小於運算子 "<" 的類型或類的向量
    ipos為開始求值的位置(向量的下標,從0開始)
    results為所有最長遞減子序列的集合,分別以各元素在原序列中的位置(下標)表示

傳回值:
    無

定義:template<class T>
void FildLDS( const vector<T> seq, const int ipos, vector< vector<int> > &results )
{
    // 不需要初始化?
    static vector<int> vcursub;

    //---------------
    for(int i = ipos; i < seq.size(); i++)
    {
        if((vcursub.size() <= 0) || seq[i] < seq[ vcursub.back() ] )
        {
            vcursub.push_back(i);

            FildLDS(seq, i+1, results);
        }
    }
    
    if(results.size() <= 0)
    {
        results.push_back(vcursub);
    }
    else if( results.back().size() < vcursub.size())
    {
        results.clear();
        results.push_back(vcursub);
    }
    else if( results.back().size() == vcursub.size())
    {
        results.push_back(vcursub);
    }

    if( !vcursub.empty() )
    {
        vcursub.pop_back();
    }
    
    return ;
}

舉例:
    請下載執行個體:(win2k + VC6 下通過)
    LDS.rar(新)

以前為了應付老師,急忙中弄了一個。現在改進了一些。
    以前那個蠢的程式在這裡LDS.rar

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.