zoukankan      html  css  js  c++  java
  • 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;
    
    }
  • 相关阅读:
    IOC
    paxos算法
    搜索引擎相关
    java常识
    Redis相关概念
    Keepalived简单理解
    LVS简单理解
    dbproxy
    用不上索引的sql
    二叉树、B树、B+树、B*树、VAL树、红黑树
  • 原文地址:https://www.cnblogs.com/Qmelbourne/p/6730183.html
Copyright © 2011-2022 走看看