Semana5 trabajo C

El significado de los problemas:
una cadena de longitud n s, que contiene sólo la 'Q', 'W', 'E', 'R' cuatro tipos de caracteres.
Si tanto el número de n / 4, que se equilibra con una serie de cuatro clases de personajes aparecen en la cadena.
S puede ser ahora período continuo de los mismos subcadenas de longitud reemplazar cualquier cadena que contiene sólo cuatro caracteres, por lo que se convierte en una cadena equilibrada, de forma alternativa preguntó longitud mínima de la subcadena?
Si s ha equilibrado salidas 0 .
entrada:
línea que representa una determinada cadena de caracteres S
de salida:
una respuesta número entero
de muestra de entrada:
QWER
de salida de la muestra:
0
Muestra de entrada:
QQWE
Salida de muestra:
. 1
Muestra de entrada:
QQQW
Salida de muestra:
2
de entrada de la muestra:
la QQQQ
Salida de muestra:
. 3
Nota :
. 1 <= n - <= 10. 5 ^
n-4 es un múltiplo de
la cadena contiene sólo el carácter 'Q', 'W', 'e' y 'R'.
Ideas:
Para determinar el número de cada carácter en la cadena de entrada. Después de la determinación, si el número de caracteres por línea con los requisitos de la sujeto a 0. De lo contrario, la salida será mayor que n caracteres operación -n. El resto de caracteres almacenados de manera que se determina de nuevo después de un valor de 0. El número de cada carácter, que se compara con el número de caracteres almacenados antes de la operación, a continuación, operado por los límites izquierdo y derecho, la condición es satisfecha, el margen izquierdo se reduce, conocer a los personajes, el número del carácter se reduce en 1, no se cumple, el derecho de aumentar la frontera, el encuentro borde derecho de los caracteres, el número de caracteres más uno, en constante movimiento alrededor del juez frontera, actualizar la respuesta, la salida .

código:

#include<iostream>
#include<cstring>
#include<map>
using namespace std;
char temp[4]={'Q','W','E','R'};
map<char,int> ran;
int main()
{
	string s;
	cin>>s;
	//int length=s.length();
	for(int i=0;i<s.length();i++)
	{
		if(s[i]=='Q')
		{
			ran[temp[0]]++;
		}
		if(s[i]=='W')
		{
			ran[temp[1]]++;
		}
		if(s[i]=='E')
		{
			ran[temp[2]]++;
		}
		if(s[i]=='R')
		{
			ran[temp[3]]++;
		}
	}
	int n=s.length()/4;
	if(ran[temp[0]]==n&&ran[temp[1]]==n&&ran[temp[2]]==n&&ran[temp[3]]==n)
	{
		cout<<"0";
		return 0;
	}
	int num=0;
	for(int i=0;i<4;i++)
	{
		if(ran[temp[i]]>n)
		{
			ran[temp[i]]=ran[temp[i]]-n;
			num=num+ran[temp[i]];
		}
		else
		{
			ran[temp[i]]=0;
		}
	}
	int left=0,right=0;
	int cm[4]={0};
	int ans=s.length();
	for(int i=left;i<=right;i++)
	{
		if(s[i]=='Q')
		{
			cm[0]++;
		}
		if(s[i]=='W')
		{
			cm[1]++;
		}
		if(s[i]=='E')
		{
			cm[2]++;
		}
		if(s[i]=='R')
		{
			cm[3]++;
		}
		
	}
	while(right<s.length())
	{
		if(cm[0]>=ran[temp[0]]&&cm[1]>=ran[temp[1]]&&cm[2]>=ran[temp[2]]&&cm[3]>=ran[temp[3]])
		{
			if((right-left)<ans)
			   ans=right-left+1;
			if(s[left]=='Q')
			   cm[0]--;
			if(s[left]=='W')
			   cm[1]--;
			if(s[left]=='E')
			   cm[2]--;
			if(s[left]=='R')
			   cm[3]--;
			left++;
		}
		else
		{
			right++;
			if(s[right]=='Q'&&right!=s.length())
			   cm[0]++;
			if(s[right]=='W'&&right!=s.length())
			   cm[1]++;
			if(s[right]=='E'&&right!=s.length())
			   cm[2]++;
			if(s[right]=='R'&&right!=s.length())
			   cm[3]++;
		}
	}
	cout<<ans;
	return 0;
 } 
Se han publicado 19 artículos originales · ganado elogios 0 · Vistas 206

Supongo que te gusta

Origin blog.csdn.net/weixin_45117273/article/details/105331776
Recomendado
Clasificación