搜狐字符串abcde

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zlb872551601/article/details/77650795
有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等。有一天国王把项链赏赐给了一个学者,并跟他说,你可以带走这条项链,但是王后很喜欢红宝石,蓝宝石,紫水晶,翡翠和钻石这五种,我要你从项链中截取连续的一小段还给我,这一段中必须包含所有的这五种宝石,剩下的部分你可以带走。如果无法找到则一个也无法带走。请帮助学者找出如何切分项链才能够拿到最多的宝石。 
输入描述:
我们用每种字符代表一种宝石,A表示红宝石,B表示蓝宝石,C代表紫水晶,D代表翡翠,E代表钻石,F代表玉石,G代表玻璃等等,我们用一个全部为大写字母的字符序列表示项链的宝石序列,注意项链是首尾相接的。每行代表一种情况。


输出描述:
输出学者能够拿到的最多的宝石数量。每行一个

输入例子1:
ABCYDYE
ATTMBQECPD

输出例子1:
1
3
 
 
想到的方法比较暴力,以后有新方法再写
#include<iostream>
#include <string>
using namespace std;
#include <algorithm>
void rotate(string &str)
{
    char temp = str[0];
	for (int i = 0; i < str.size()-1; i++)
	{
		str[i] = str[i + 1];


	}
	str[str.size() - 1] = temp;
}
int check(string& str)
{
	for (int i = 5; i <= str.size() ; i++)
	{
		string str_temp = str.substr(0, i);
		bool flag1 = find(str_temp.begin(), str_temp.end(), 'A') != str_temp.end();
		bool flag2 = find(str_temp.begin(), str_temp.end(), 'B') != str_temp.end();
		bool flag3 = find(str_temp.begin(), str_temp.end(), 'C') != str_temp.end();
		bool flag4 = find(str_temp.begin(), str_temp.end(), 'D') != str_temp.end();
		bool flag5 = find(str_temp.begin(), str_temp.end(), 'E') != str_temp.end();
		if (flag1&&flag2&&flag3&&flag4&&flag5)
		{
			return str.size()- i;
		}
	}
}
int solve(string str)
{
	int step_min =0;
	for (int i = 0; i < str.size();i++)
	{
		rotate(str);
		int step=check(str);
		step_min = max(step_min, step);
	}
	return step_min;
}
int main()
{
	string str;
	while (cin>>str)
	{
		int ans=solve(str);
		cout << ans << endl;
		
	}
	return 0;
	
}

猜你喜欢

转载自blog.csdn.net/zlb872551601/article/details/77650795