Week5 C - 平衡字符串

Week5 C - 平衡字符串
一个长度为 n 的字符串 s,其中仅包含 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符。

如果四种字符在字符串中出现次数均为 n/4,则其为一个平衡字符串。

现可以将 s 中连续的一段子串替换成相同长度的只包含那四个字符的任意字符串,使其变为一个平衡字符串,问替换子串的最小长度?

如果 s 已经平衡则输出0。

Input
一行字符表示给定的字符串s

Output
一个整数表示答案

Examples
Input

QWER

Output

0

Input

QQWE

Output

1

Input

QQQW

Output

2

Input

QQQQ

Output

3

Note
1<=n<=10^5

n是4的倍数

字符串中仅包含字符 ‘Q’, ‘W’, ‘E’ 和 ‘R’.

解题思路
利用滑动窗口 [ L , R ]
当条件符合时 L++ 当条件不符合时 R++
窗口内判断 MAX=mm(sum1,sum2,sum3,sum4)
TOTAL = R - L + 1 当前窗口长度
free=TOTAL-((MAX-sum1)+(MAX-sum2)+(MAX-sum3)+(MAX-sum4));
当 free >= 0 且 free 的值是 4 的倍数时 符合条件
Code

#include<iostream>
#include <algorithm>
#include <cstring>
using namespace std;
string s;
int sum1=0,sum2=0,sum3=0,sum4=0;
int mm(int s1,int s2,int s3,int s4){
	return max(max(s1,s2),max(s3,s4));
}
int main(){
	cin>>s;
	int sl=s.length();
	//cout<<s[0]<<' '<<s[1]<<' '<<s[2]<<' '<<s[3]<<endl;
	for(int i=0;i<sl;i++){
		switch(s[i]){
			case'Q':
				sum1++;break;
			case'W':
				sum2++;break;
			case'E':
				sum3++;break;
			case'R':
				sum4++;break;
		}
	}
	//cout<<sum1<<' '<<sum2<<' '<<sum3<<' '<<sum4<<endl;
	if(sum1==sum2&&sum2==sum3&&sum3==sum4){
		cout<<0;
		return 0;
	}
	switch(s[0]){
			case'Q':
				sum1--;break;
			case'W':
				sum2--;break;
			case'E':
				sum3--;break;
			case'R':
				sum4--;break;
		}
	int r=0,l=0; 
	int ans=10000000;
	while(1){
		//for(int i=l;i<=r;i++)cout<<s[i]<<' ';
		
		int MAX=mm(sum1,sum2,sum3,sum4);
		int total=r-l+1;
		int free=total-((MAX-sum1)+(MAX-sum2)+(MAX-sum3)+(MAX-sum4));//cout<<total<<endl;
		if(free>=0&&free%4==0){//cout<<"go l"<<endl;
			if(ans>total)ans=total;
			switch(s[l]){
			case'Q':
				sum1++;break;
			case'W':
				sum2++;break;
			case'E':
				sum3++;break;
			case'R':
				sum4++;break;
		}
		l++;
		}else{//cout<<"go r"<<endl;
			if(r+1<sl)r++;
			else break;
			switch(s[r]){
			case'Q':
				sum1--;break;
			case'W':
				sum2--;break;
			case'E':
				sum3--;break;
			case'R':
				sum4--;break;
		}
		}
	}
	cout<<ans;
}

``` {============== 波动率自适应系统 ==============} MARKET_VOLA:=STD(CLOSE,60)/MA(CLOSE,60); DYN_SHT_PERIOD:=INTPART(8 + 12*MARKET_VOLA); DYN_LGCYC:=INTPART(MAX(DYN_SHT_PERIOD*3,50 + 250*MARKET_VOLA)); DYN_SMT_PERIOD:=INTPART((DYN_SHT_PERIOD + DYN_LGCYC)/2*(1 + 0.5*MARKET_VOLA)); {============== 智能EMA体系 ==============} VOL_WT_EMA:=VOL/MA(VOL,20); FAST_EMA:=EMA(CLOSE*VOL_WT_EMA,DYN_SHT_PERIOD)/EMA(VOL_WT_EMA,DYN_SHT_PERIOD); TR_CUSTOM:=MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))); SLOW_EMA:=WMA(CLOSE,DYN_LGCYC)*(0.7+MA(TR_CUSTOM,INTPART(DYN_LGCYC))/MA(CLOSE,DYN_LGCYC)); {============== 信号处理 ==============} DIFF_SIGNAL:=(FAST_EMA - SLOW_EMA)/SLOW_EMA*100; SMOOTH_DIFF:=EMA(DIFF_SIGNAL,DYN_SMT_PERIOD) + 0.5*EMA(DIFF_SIGNAL,INTPART(DYN_SMT_PERIOD/2)); FRACTAL_DIM:=LOG(HHV(HIGH,20)-LLV(LOW,20))/LOG(20); MOMENTUM_WAV:=SIN(DIFF_SIGNAL*3.1415926/10)*0.3 + COS(SMOOTH_DIFF*3.1415926/5)*0.7; {============== 深度学习模拟 ==============} SIGMOID_INPUT:=SMOOTH_DIFF/10; SIGMOID_GATE:=1/(1 + EXP(-SIGMOID_INPUT)); { 自定义双曲正切实现 } TANH_CUSTOM:=(EXP(DIFF_SIGNAL)-EXP(-DIFF_SIGNAL))/(EXP(DIFF_SIGNAL)+EXP(-DIFF_SIGNAL)); LSTM_CELL:=TANH_CUSTOM*0.6 + SIGMOID_GATE*0.4; ATTENTION:=(DIFF_SIGNAL - LLV(DIFF_SIGNAL,20))/(HHV(DIFF_SIGNAL,20)-LLV(DIFF_SIGNAL,20)); {============== 多维验证 ==============} WEEK_TREND:=REF("MACD.DIF#WEEK",1) > REF("MACD.DEA#WEEK",1); MONTH_MOM:=REF("RSI.RSI1#MONTH",1)>40 AND REF("RSI.RSI1#MONTH",1)<70; {修正RSI输出线} BLOCK_STR:=IF(INDEXC/REF(INDEXC,20)>1.2,1,0); {============== 信号系统 ==============} SIGNAL_EN:=POW(LSTM_CELL,2.718)*FRACTAL_DIM + MOMENTUM_WAV*ATTENTION; NORM_SIGNAL:=(SIGNAL_EN - LLV(SIGNAL_EN,60))/(HHV(SIGNAL_EN,60)-LLV(SIGNAL_EN,60)); VERIFY_SYS:= CLOSE/MA(CLOSE,20) > 0.93 AND VOL/MA(VOL,10) > 1.5 AND "MACD.DIF" > "MACD.DEA" AND FRACTAL_DIM > 1.2 AND BLOCK_STR; {============== 风控系统 ==============} DRAWDOWN:=IF(BARSLAST(SIGNAL_EN>0.8)>10, 1, 0.8); POS_COEF:=DRAWDOWN*(1 - MARKET_VOLA/0.3); {============== 最终信号 ==============} BUY_SIGNAL:= NORM_SIGNAL > 0.7 AND VERIFY_SYS AND WEEK_TREND AND MONTH_MOM AND COUNT(CROSS(NORM_SIGNAL,0.6),5)>=2; DRAWICON(BUY_SIGNAL,LOW,1);```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我正在编辑【通达信选股】代码,遇到了 【代码选股未出现选股信号,帮我优化参数,选到即将大幅上涨的股票】,请帮我检查并优化参数设置补全正确代码,生成修正后完整代码。
最新发布
03-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值