HankerRank刷題第一天(string類型)


一共做了三道題,前兩道比較簡單就不寫出來了

第三道雖然也是個簡單題..但對於我這種小菜雞來說..還是..寫不出來的,在看了別人的代碼之后知道了思路又自己寫出來了。

 

題目地址:https://www.hackerrank.com/challenges/two-characters

 

大概意思就是給一個字符串,經過操作得到一個字符串是ABAB或者BABA類型的,只能有兩個字母並且不能有相鄰相同的。然后求最長的這種字符串

如 beabeefeab 變成babab 長度為5

 

題目給的字符串的最大長度是1000,當時想先去掉重復的,再看是否只有兩種字符..但這樣循環循環也不知道怎么讓他停。

看了別人的代碼,才發現完全可以不用糾結這個1000,換一種思路:

 

字母一共就26個,完全可以每一種搭配都試一下啊! 最多也就26*26的時間復雜度...

 

思路:

每一種搭配都拿出來放在一個新的字符串中

看這個字符串是否符合沒有相鄰相同的要求,不符合繼續循環,符合記錄下長度繼續循環

等到循環結束,輸出最大長度即可。

 

 

#include <cstdio>
#include
<iostream>
#include
<string>
#include
<algorithm>
#include
<cmath>

using namespace std;

int main() {
string s;
int n;
cin
>>n;
cin
>>s;
int result=0;
for(char x='a';x<='z';x++)
{
for(char y='a';y<='z';y++)
{
if(x!=y)
{
string P="";
for(int i=0;i<n;i++)
{
if(s[i]==x||s[i]==y)
P
+=s[i];
}
bool flag=true;
for(int i=0;i<P.length()-1;i++)
{
if(P[i]==P[i+1])
{
flag
=false;
break;
}
}

if(flag&&P.length()>1)
{
if(result<P.length())
result
=P.length();
}
}
}
}

cout
<<result<<endl;

}

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com