題目如下:
如果一個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;
}