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; }