网易首页 > 网易号 > 正文 申请入驻

2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种

0
分享至

2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数,

你可以把任意连续的一段子串,变成'W'、'A'、'S'、'D'组成的随意状态,

目的是让4种字符词频一样。

返回需要修改的最短子串长度。

完美走位问题。

输入:s = "QQQW"。

输出:2。

解释:我们可以把前面的 "QQ" 替换成 "ER"。

来自华为OD。

来自左程云。

答案2023-08-20:

算法步骤:

1.定义辅助函数,用于判断当前字符词频是否能使四种字符的词频相同。

ok()

2.初始化数组保存每个字符的对应值('Q': 0, 'W': 1, 'E': 2, 'R': 3)和数组记录每个字符的词频。

arr

cnts

3.使用双指针来搜索每个可能的子串。外层循环控制左指针,内层循环控制右指针。

4.当当前子串不满足要求时,右指针向右移动并更新词频数组,直到子串满足要求。

cnts

5.当子串满足要求时,更新当前最短子串长度。

6.左指针向右移动并更新词频数组,继续搜索可能的子串。

7.返回最短子串长度。

总的时间复杂度为O(n),其中n是字符串的长度。

总的额外空间复杂度为O(1),因为只使用了固定大小的数组和常数个变量。

go完整代码如下:

packagemain
import"fmt"
funcbalancedString(sstring)int{
n:=len(s)
arr:=make([]int,n)
cnts:=make([]int,4)
fori:=0;iswitchs[i]{
case'Q':
arr[i]=0
case'W':
arr[i]=1
case'E':
arr[i]=2
case'R':
arr[i]=3
}
cnts[arr[i]]++
}
ans:=n
forl,r:=0,0;lfor!ok(cnts,l,r)&&rcnts[arr[r]]--
r++
}
ifok(cnts,l,r){
ans=min(ans,r-l)
}else{
break
}
cnts[arr[l]]++
}
returnans
}
funcok(cnts[]int,lint,rint)bool{
maxCnt:=max(max(max(cnts[0],cnts[1]),cnts[2]),cnts[3])
changes:=maxCnt*4-cnts[0]-cnts[1]-cnts[2]-cnts[3]
rest:=r-l-changes
returnrest>=0&&rest%4==0
}
funcmin(a,bint)int{
ifareturna
}
returnb
}
funcmax(a,bint)int{
ifa>b{
returna
}
returnb
}
funcmain(){
s:="QQQW"
result:=balancedString(s)
fmt.Println(result)
}

rust完整代码如下:

fnbalanced_string(s:&str)->i32{
letn=s.len()asi32;
letmutarr=Vec::with_capacity(nasusize);
letmutcnts=vec![0;4];
forcins.chars(){
letval=matchc{
'W'=>1,
'E'=>2,
'R'=>3,
_=>0,
};
arr.push(val);
cnts[val]+=1;
}
letmutans=n;
forlin0..n{
letmutr=l;
while!ok(&cnts,l,r)&&rcnts[arr[rasusize]asusize]-=1;
r+=1;
}
ifok(&cnts,l,r){
ans=ans.min(r-l);
}else{
break;
}
cnts[arr[lasusize]asusize]+=1;
}
ans
}
fnok(cnts:&[i32],l:i32,r:i32)->bool{
letmax_cnt=cnts.iter().max().copied().unwrap_or(0);
letchanges=max_cnt*4-cnts[0]-cnts[1]-cnts[2]-cnts[3];
letrest=r-l-changes;
rest>=0&&rest%4==0
}
fnmain(){
lets="QQQW";
letresult=balanced_string(s);
println!("{}",result);
}

c++完整代码如下:

#include
#include
#include
#include
boolok(conststd::vector&cnts,intl,intr);
intbalancedString(conststd::string&str){
intn=str.size();
std::vectorarr(n);
std::vectorcnts(4);
for(inti=0;icharc=str[i];
arr[i]=(c=='W'?1:(c=='E'?2:(c=='R'?3:0)));
cnts[arr[i]]++;
}
intans=n;
for(intl=0,r=0;lwhile(!ok(cnts,l,r)&&rcnts[arr[r++]]--;
}
if(ok(cnts,l,r)){
ans=std::min(ans,r-l);
}
else{
break;
}
cnts[arr[l]]++;
}
returnans;
}
boolok(conststd::vector&cnts,intl,intr){
intmaxCnt=std::max(std::max(cnts[0],cnts[1]),std::max(cnts[2],cnts[3]));
intchanges=maxCnt*4-cnts[0]-cnts[1]-cnts[2]-cnts[3];
intrest=r-l-changes;
returnrest>=0&&rest%4==0;
}
intmain(){
std::strings="QQQW";
intresult=balancedString(s);
std::cout<<"Result:"<return0;
}

c完整代码如下:

#include
#include
#include
intbalancedString(char*s){
intn=strlen(s);
int*arr=(int*)malloc(sizeof(int)*n);
intcnts[4]={0};
for(inti=0;icharc=s[i];
arr[i]=c=='W'?1:(c=='E'?2:(c=='R'?3:0));
cnts[arr[i]]++;
}
intans=n;
for(intl=0,r=0;lwhile(!ok(cnts,l,r)&&rcnts[arr[r++]]--;
}
if(ok(cnts,l,r)){
ans=ans}
else{
break;
}
cnts[arr[l]]++;
}
free(arr);
returnans;
}
intok(int*cnts,intl,intr){
intmaxCnt=cnts[0];
for(inti=1;i<4;i++){
if(cnts[i]>maxCnt){
maxCnt=cnts[i];
}
}
intchanges=maxCnt*4-cnts[0]-cnts[1]-cnts[2]-cnts[3];
intrest=r-l-changes;
returnrest>=0&&rest%4==0;
}
intmain(){
chars[]="QQQW";
intresult=balancedString(s);
printf("%d\n",result);
return0;
}

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
你知道为什么说“女性的私处”比马桶还要“脏”吗?

你知道为什么说“女性的私处”比马桶还要“脏”吗?

水白头
2024-06-15 11:07:02
重庆农商行女职员表白副行长后续: 单位回应 知情人爆内幕 评论破防

重庆农商行女职员表白副行长后续: 单位回应 知情人爆内幕 评论破防

妮子说美食
2024-06-16 06:53:56
御姐风!太高级!要不起的感觉

御姐风!太高级!要不起的感觉

梧州生活宝
2024-05-22 23:14:03
冷门要来了?詹俊:这届欧洲杯第一个冷门什么时候出现? 今晚么?

冷门要来了?詹俊:这届欧洲杯第一个冷门什么时候出现? 今晚么?

直播吧
2024-06-16 13:10:13
专家吐槽二本学生不尊重她演讲,遭回怼:你什么档次,我什么态度

专家吐槽二本学生不尊重她演讲,遭回怼:你什么档次,我什么态度

熙熙说教
2024-06-16 11:58:29
明天下定决心全部清仓!转融通,量化一日不取消,一日不交易

明天下定决心全部清仓!转融通,量化一日不取消,一日不交易

股海风云大作手
2024-06-16 19:00:54
欧洲杯很搞笑!镜头告诉你:瑞士前锋射门前掉下的异物是啥?

欧洲杯很搞笑!镜头告诉你:瑞士前锋射门前掉下的异物是啥?

足球大腕
2024-06-16 00:04:15
意外!申花队长夏窗确定驰援大连英博冲超,来球队月薪只有一万多

意外!申花队长夏窗确定驰援大连英博冲超,来球队月薪只有一万多

罗掌柜体育
2024-06-15 19:32:24
经济形势有多严峻?3个现象席卷中国各地,预示苦日子已开始?

经济形势有多严峻?3个现象席卷中国各地,预示苦日子已开始?

山丘楼评
2024-06-07 11:45:11
彻底炸了!周末突传利空!下周A股将下跌?

彻底炸了!周末突传利空!下周A股将下跌?

龙行天下虎
2024-06-16 14:25:24
巨亏百亿,关店11万家!昔日购物天堂,无力回天

巨亏百亿,关店11万家!昔日购物天堂,无力回天

金错刀
2024-06-14 14:28:04
陈兴汉-南京栖霞建设股份有限公司原总经理

陈兴汉-南京栖霞建设股份有限公司原总经理

户外钓鱼哥阿旱
2024-06-16 17:10:57
成都蓉城新任董事长现身客场看台,和远征球迷们一起助威

成都蓉城新任董事长现身客场看台,和远征球迷们一起助威

懂球帝
2024-06-16 18:49:10
上海女子请人上门灭白蚁崩溃:几百元就能解决,对方竟收了9000元!网友:按只收费?

上海女子请人上门灭白蚁崩溃:几百元就能解决,对方竟收了9000元!网友:按只收费?

上海圈
2024-06-15 12:38:41
中超最新积分战报:申花夺榜首,武汉三镇1-0险胜,沧州雄狮落败

中超最新积分战报:申花夺榜首,武汉三镇1-0险胜,沧州雄狮落败

足球狗说
2024-06-16 21:58:02
英国首相苏纳克和他的鞋,英国民众盯着他的脚不放了

英国首相苏纳克和他的鞋,英国民众盯着他的脚不放了

好笑娱乐君每一天
2024-06-16 08:51:39
下周一6月17日,这 4大具有爆发力板块或有望开启反攻

下周一6月17日,这 4大具有爆发力板块或有望开启反攻

惜别的海岸
2024-06-16 17:48:39
撞上了!菲野蛮冲撞中国海警,我方人员险些落海,现在开始上强度

撞上了!菲野蛮冲撞中国海警,我方人员险些落海,现在开始上强度

笔墨V
2024-06-16 12:36:50
江苏男子整理母亲遗物发现600万存单,银行:假的需要销毁

江苏男子整理母亲遗物发现600万存单,银行:假的需要销毁

丹宝说文史
2023-07-08 20:21:44
两性疑问:为什么男生更喜欢从后面来

两性疑问:为什么男生更喜欢从后面来

坟头长草
2024-05-30 16:33:38
2024-06-16 22:12:49
moonfdd
moonfdd
福大大架构师每日一题
424文章数 7关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

牵涉越南“女首富”案 又一位越共中央高层受处分

头条要闻

牵涉越南“女首富”案 又一位越共中央高层受处分

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

旅游
游戏
家居
手机
公开课

旅游要闻

@毕业生,江苏这些景区可享免票或优惠

《夺宝奇兵》涉及多个关卡场景 新老角色都有

家居要闻

空谷来音 朴素留白的侘寂之美

手机要闻

后置双蔡司认证镜头 + 双色温闪光灯,vivo V40 手机海外发布

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版