week5C 平衡字符串

题意:

有一串字符,长度为n(n为4的倍数),其中仅包含 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符。如果四种字符在字符串中出现次数均为 n/4,则其为一个平衡字符串。可将 s 中连续的一段子串替换成相同长度的只包含那四个字符的任意字符串,使其变为一个平衡字符串,求替换字符串的最小长度。

input:

一串字符。

output:

字符串的最小长度,如果本来就是平衡的,则输出0。

思路:

利用尺取法可以得到,首先可知,替换的字符串越长其越能成功。即有尺取的区间l和r。如果当前的区间不能替换成功,则说明区间小了,则r++,否则区间能成功,可尝试更小的区间l++。 接下来即为能否成功的判定条件,首先需要在这个而区间外的各个字符的个数。不妨设为sum[0~3]。因为替换后字符的数量只会增加,故要想平衡则向字符数最大的一个(设为max),则需要替换的字符数量为 total=4max-(sum[1~3])。此时可替换的为free=r-l+1。若free>total,且替换后free的值仍为4的倍数,则为可以成功,否则不成功。每次符合条件后,可判定是否为当前最短的,再选择是否覆盖。最后输出最短的长度即可。注意在移动区间的时候,要更新sum的值,即有新的字符进来,有旧的字符出去。

总结:

一开始准备用getchar读字符,但不知道最后终止的条件,然后用的string读,同时可以得到字符串的长度。

代码:

#include <iostream>
#include <cstdio>
#include <algorithm> 
#include <string>
using namespace std;
int sum[4];
int num=100000;  //所需要替换的字母数量 

int f(char c){
	if(c=='Q') return 0;
	if(c=='W') return 1;
	if(c=='E') return 2;
	if(c=='R') return 3;
}

int fmax(){
	return max(max(sum[0],sum[1]),max(sum[2],sum[3])); 
}

int main(){
	string c;
	cin>>c;
	int len=c.length();
	for(int i=0; i<len;i++){
		int j=f(c[i]);
		sum[j]++;
	}
		
	int j=f(c[0]);
	sum[j]--;
	int l=0,r=0;  //左右端点 
	int Max=fmax();  //字符数最多的 
	int total=r-l+1;  //可修改的 
	int free=total-(4*Max-sum[0]-sum[1]-sum[2]-sum[3]);  //剩余修可供修改的
	
	while(1){
		int j=0; 
		if(free>=0 && (free%4)==0 ){ //符合要求  
			if(total<num) num=total;
			j=f(c[l]); 
			l++;
			sum[j]++;
		}else{   //不符合要求 
			
			if(r<len-1){
				r++;	
			}else{
				break;
			} 
			j=f(c[r]);	
			sum[j]--;
		}
		Max=fmax();
		total=r-l+1;
		free=total-(4*Max-sum[0]-sum[1]-sum[2]-sum[3]);
	}
		
	if(num==100000) num=0;
	cout<<num<<endl;
	return 0;	
	
}
	
	
内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
在 MySQL 中,字符串日期的处理涉及到多种场景和函数。 ### 日期格式转换 可使用`DATE_FORMAT`函数将日期/时间转换为自定义字符串格式。语法为`DATE_FORMAT(日期/时间字段, '格式符')`。常用格式符有: - `%Y`:4 位年份,如 2024; - `%y`:2 位年份,如 24; - `%m`:2 位月份(01 - 12),如 05; - `%c`:1 位/2 位月份(1 - 12),如 5; - `%d`:2 位日期(01 - 31),如 20; - `%H`:24 小时制(00 - 23),如 14; - `%h`:12 小时制(01 - 12),如 02; - `%i`:2 位分钟(00 - 59),如 30; - `%s`:2 位秒(00 - 59),如 00; - `%W`:英文星期全称,如 Monday; - `%w`:数字星期(0 = 周日),如 1。 示例如下: ```sql -- 将订单日期格式化为“2024年05月20日” SELECT DATE_FORMAT(order_date, '%Y年%m月%d日') AS formatted_date FROM orders; -- 将注册时间格式化为“24-05-20 14:30” SELECT DATE_FORMAT(register_time, '%y-%m-%d %H:%i') AS short_time FROM users; -- 统计每周各天的订单数(按“周一、周二”显示) SELECT DATE_FORMAT(order_date, '%W') AS week_day, COUNT(*) AS order_count FROM orders GROUP BY week_day; ``` ### 日期计算 在 MySQL 中可以进行日期的加减和差值计算。不过引用中未详细提及具体函数及用法。 ### 字符串与日期相关的其他函数 - `UNIX_TIMESTAMP()`:将日期时间值转换为 UNIX 时间戳(自 1970 年 1 月 1 日以来的秒数)。 - `CURRENT_TIMESTAMP`:返回当前日期和时间,格式为`'YYYY-MM-DD HH:MM:SS'`。 - `NOW()`:返回当前系统时间。 - `YEAR()`、`MONTH()`、`DAY()`、`HOUR()`、`MINUTE()`、`SECOND()`:分别用于提取日期时间中的年、月、日、时、分、秒 [^4]。 ### 字符串处理函数在日期字符串中的应用 除了专门的日期函数,一些字符串处理函数也可用于处理日期字符串: - **字符串长度计算**:`CHAR_LENGTH`和`CHARACTER_LENGTH`用于计算字符串的字符长度,`LENGTH`和`BIT_LENGTH`分别返回字符串的字节长度和位长度 [^2][^3]。 - **字符串连接与替换**:`CONCAT`和`CONCAT_WS`用于字符串的连接,`TRIM`、`LTRIM`和`RTRIM`用于去除字符串两端的特定字符 [^3]。 - **字符串大小写转换**:`LOWER`和`LCASE`用于将字符串转换为小写,`UPPER`和`UCASE`用于将字符串转换为大写 [^3]。 - **字符串截取与定位**:`SUBSTRING`、`SUBSTR`和`MID`用于截取字符串的一部分,`LOCATE`和`POSITION`用于定位子字符串字符串中的位置 [^3]。 - **字符串填充与替换**:`LPAD`和`RPAD`用于在字符串的两端填充特定字符,`REPEAT`用于重复字符串,`REPLACE`用于替换字符串中的子字符串 [^3]。 - **字符串分割与比较**:`ELT`用于从参数列表中获取字符串,`ASCII`和`ORD`用于获取字符串中字符的 ASCII 值,`CHAR`用于从 ASCII 码生成字符串,`FIND_IN_SET`用于查找字符串在列表中的位置,`INSTR`和`POSITION`用于查找子字符串字符串中的位置,`SUBSTRING_INDEX`用于获取基于子字符串的位置的字符串部分,`STRCMP`用于比较两个字符串并返回比较结果 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值