2018校招網易筆試——最長01交錯子串

題目如下:

如果一個01串任意兩個位置的相鄰的字符都是不一樣的,就叫這個01串爲交錯01串,要求出一個最長的交錯01子串,輸入字符串s,和s的長度length。輸出子串的長度。

做題思路如下:

1、這是一個動態規劃問題,可以定義一個數組,長度爲和s相同,存放到i爲止的最長交錯01子串長度;

2、到第i個元素爲止的子串長度爲:若i和i-1的值不一樣,子串長度爲i-1的子串長度加一,若值相同,子串長度爲初始值1;

3、得到數組之後,取其中最大值即爲所求的01交錯子串的長度。

具體的c++代碼如下:

#include <iostream>
#include<vector>
#include<string>
using namespace std;


int stringlenth(string &s,int length)
    {
    int i;
    vector<int> res(length,1);
    for(i=1;i<length;i++)
        {
        if(s[i]!=s[i-1])
            {
            res[i]=res[i-1]+1;
        }
        
    }
    int maxlong=res[0];
    for(i=1;i<length;i++)
        {
        if(res[i]>maxlong)
            {
            maxlong=res[i];
        }
        
    }
    return maxlong;
}


int main()
    {
    string s;
    cin>>s;
    int length=s.size();
    int resnum= stringlenth(s,length);
    cout<<resnum<<endl;
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章