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;

}
原文地址:https://www.cnblogs.com/Qmelbourne/p/6730183.html