当前位置: 首页 > news >正文

有效的括号长按键入验证外星语词典字符的最短距离用栈实现队列

有效的括号

来源:杭哥

20. 有效的括号 - 力扣(LeetCode)

bool isValid(char * s)
{int sz=strlen(s);char stack[sz];int k=0;for (int i=0;i<sz;i++){if (s[i]=='(' || s[i]=='[' || s[i]=='{'){stack[k++]=s[i];}else{if (k==0){return false;}else if (s[i]=='}' && stack[k-1]!='{'){return false;}else if (s[i]==']' && stack[k-1]!='['){return false;}else if (s[i]==')' && stack[k-1]!='('){return false;}k--;}}if (k!=0){return false;}return true;
}
我想说:
  1. 这时候就要用栈这种数据结构了,非常方便。


长按键入

来源:自己LeetCode刷题

925. 长按键入 - 力扣(LeetCode)

bool isLongPressedName(char * name, char * typed)
{int sz1=strlen(name);int sz2=strlen(typed);int i=0;int j=0;if (name[i]==typed[j]){i++;j++;}else{return false;}while(i<=sz1-1 && j<=sz2-1){if (name[i]==typed[j]){i++;j++;}else{if (typed[j]==typed[j-1]){j++;}else{return false;}}}if (i==sz1){if (j==sz2){return true;}char ch=name[sz1-1];while(j<sz2){if (typed[j]!=ch){return false;}j++;}   }else{return false;}return true;
}
我想说:
  1. 这道题目的话可以用双指针来做,逻辑关系想想清楚,然后代码能力稍微有一点的话就可以做出来


验证外星语词典

来源:自己LeetCode刷题

953. 验证外星语词典 - 力扣(LeetCode)

bool isAlienSorted(char ** words, int wordsSize, char * order)
{int alpha[26]={0};for (int i=0;i<26;i++){alpha[order[i]-'a']=i;}for (int i=0;i<wordsSize-1;i++){char* s1=words[i];char* s2=words[i+1];while (*s1!='\0' && *s2!='\0' && alpha[*s1-'a']==alpha[*s2-'a']){s1++;s2++;}if ((*s1=='\0' && *s2!='\0') || (*s1=='\0' && *s2=='\0')){continue;}else if (*s1!='\0' && *s2=='\0'){return false;}if (alpha[*s1-'a']<alpha[*s2-'a']){continue;}else if (alpha[*s1-'a']>alpha[*s2-'a']){return false;}}return true;
}
我想说:
  1. 字符与整数之间可以灵活转化,因为字符其实本质上就是ACSII码,就是整型。


字符的最短距离

来源:自己LeetCode刷题

821. 字符的最短距离 - 力扣(LeetCode)

typedef struct point 
{int a;int b;
}point;
int* shortestToChar(char * s, char c, int* returnSize)
{int sz=strlen(s);int* ans = (int*)malloc(sizeof(int)*sz);*returnSize=sz;for (int i=0;i<sz;i++){ans[i]=-1;}point queue[10000]={0};int hh=0;int tt=-1;for (int i=0;i<sz;i++){if (s[i]==c){tt++;queue[tt].a=i;queue[tt].b=0;ans[i]=0;}}while(hh<=tt){int aa=queue[hh].a;int bb=queue[hh].b;hh++;if (aa-1>=0 && ans[aa-1]==-1){ans[aa-1]=bb+1;tt++;queue[tt].a=aa-1;queue[tt].b=bb+1;}if (aa+1<sz && ans[aa+1]==-1){ans[aa+1]=bb+1;tt++;queue[tt].a=aa+1;queue[tt].b=bb+1;}}return ans;
}
我想说:
  1. 首先得提一下语法问题,当用malloc在内存的堆区开辟一块连续空间的时候,其实我们都知道与数组没有什么区别,但是如果想把这块堆区空间的值,比如说全部初始化成-1,不能memset(arr , 0xff , sizeof(arr)),bty数组这样子干没有问题。这个与数组是有区别的,只能for循环一个一个去初始化。

  1. 这个方法用到了队列

#define MIN(a,b) ((a)<(b)?(a):(b))
int* shortestToChar(char * s, char c, int* returnSize)
{int sz=strlen(s);int* ans = (int*)malloc(sizeof(int)*sz);*returnSize=sz;int idx=(-1)*sz;for (int i=0;i<sz;i++){if (s[i]==c){idx=i;}ans[i]=i-idx;}idx=2*sz;for (int i=sz-1;i>=0;i--){if (s[i]==c){idx=i;}ans[i]=MIN(ans[i],idx-i);}return ans;
}
我想说:
  1. 这种方法的话就比较新奇,先从左往右遍历,这时候我统计的是左端距离字符c最近是多少(只关注左端);然后我从右往左遍历,这时候我统计的是右端距离字符c最近是多少(只关注右端),注意:还要与之前的数值取小。

  1. 然后在遍历的时候一开始都是不知道字符c在哪里的,这时候就假定idx为-n 或者 2n


用栈实现队列

232. 用栈实现队列 - 力扣(LeetCode)

typedef int STDataType;
typedef struct Stack
{int top;int capacity;STDataType* p;
}ST;void STInit(ST* pst)
{assert(pst);pst->p = (STDataType*)malloc(sizeof(STDataType)*100);if (pst->p==NULL){perror("STInit::Malloc");return;}pst->top=0;pst->capacity=100;
}void STDestroy(ST* pst)
{assert(pst);free(pst->p);pst->p=NULL;pst->top=0;pst->capacity=0;
}void STPush(ST* pst, STDataType x)
{assert(pst);if (pst->top==pst->capacity){STDataType* pp=(STDataType*)realloc(pst->p,sizeof(STDataType)*(pst->capacity)*2);if (pp==NULL){perror("STPush::Realloc");return;}pst->p=pp;pst->capacity*=2;}pst->p[pst->top]=x;pst->top++;
}void STPop(ST* pst)
{assert(pst);assert(pst->top>0);pst->top--;
}bool STEmpty(ST* pst)
{assert(pst);return pst->top==0;
}int STTop(ST* pst)
{assert(pst);assert(pst->top>0);return pst->p[pst->top-1];
} int STSize(ST* pst)
{assert(pst);return pst->top;
}///typedef struct 
{ST pushst;ST popst;
} MyQueue;MyQueue* myQueueCreate() 
{MyQueue* obj = (MyQueue*)malloc(sizeof(MyQueue));if (obj==NULL){perror("malloc::fail");return NULL;}STInit(&obj->pushst);STInit(&obj->popst);return obj;
}void myQueuePush(MyQueue* obj, int x) 
{assert(obj);STPush(&obj->pushst,x);
}int myQueuePop(MyQueue* obj) 
{assert(obj);if (STEmpty(&obj->popst)){int num=STSize(&obj->pushst);for (int i=0;i<num;i++){STDataType tmp=STTop(&obj->pushst);STPush(&obj->popst,tmp);STPop(&obj->pushst);}}int ans=STTop(&obj->popst);STPop(&obj->popst);return ans;
}bool myQueueEmpty(MyQueue* obj) 
{assert(obj);return (&(obj->pushst))->top == 0 && (&(obj->popst))->top == 0;
}int myQueuePeek(MyQueue* obj) 
{assert(obj);if (STEmpty(&obj->popst)){int num=STSize(&obj->pushst);for (int i=0;i<num;i++){STDataType tmp=STTop(&obj->pushst);STPush(&obj->popst,tmp);STPop(&obj->pushst);}}int ans=STTop(&obj->popst);return ans;
}void myQueueFree(MyQueue* obj) 
{assert(obj);STDestroy(&obj->pushst);STDestroy(&obj->popst);
}
我想说:
  1. 这道题的话,它的方法非常的奇特,一个栈就是定向很明确的,专门用来放入数据,另外一个栈专门用来弹出数据,这个不像之前的用队列去模拟栈,哪个队列不为空,我就往哪个队列里面去插入数据。

  1. 然后这边的话出数据的栈它里面的数据都是从入数据的栈那边倒过来的,然后等到你这个栈出数据如果出空了,就再从另外一个栈那边把数据给倒过来。在这个问题当中,两个栈的功能是极其明确的,是固定的。


相关文章:

有效的括号长按键入验证外星语词典字符的最短距离用栈实现队列

有效的括号来源&#xff1a;杭哥20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09;bool isValid(char * s) {int szstrlen(s);char stack[sz];int k0;for (int i0;i<sz;i){if (s[i]( || s[i][ || s[i]{){stack[k]s[i];}else{if (k0){return false;}else if (s[i]} &am…...

《前端开发者的进阶之路》

前端作为Web开发的重要领域之一&#xff0c;不断地发展和演变着。除了基本的HTML、CSS、JavaScript技能&#xff0c;前端开发者需要掌握更多的进阶知识才能应对不断变化的需求。本文将介绍一些前端的进阶知识&#xff0c;帮助前端开发者进一步提高自己的技能水平。1.框架和库在…...

为什么说网络安全是风口行业?是IT行业最后的红利?

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高&#xff0c;涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万&…...

使用shell 脚本,批量解压一批zip文件,解压后的文件放在以原zip文件名前10个字符的文件夹中的例子

#!/bin/bash for file in *.zip dofolder$(echo $file | cut -c 1-10)mkdir $folderunzip -q $file -d $folder doneecho "All zip files have been extracted." # 说明&#xff1a; # 1. for循环遍历当前目录下的所有zip文件 # 2. 使用cut命令提取zip文件名前10个字…...

01 | Msyql系统架构

目录MySQL系统架构连接器查询缓存分析器优化器执行器MySQL系统架构 大体来说&#xff0c;MySQL分为Server层和引擎层两部分。 Server层包含链接器、查询缓存、分析器、优化器和执行器&#xff0c;而引擎层负责的是数据的存储和读取&#xff0c;支持InnoDB、Myisam、Memory等多…...

Linux命令---设备管理

Linux setleds命令Linux setleds命令用来设定键盘上方三个 LED 的状态。在 Linux 中&#xff0c;每一个虚拟主控台都有独立的设定。语法setleds [-v] [-L] [-D] [-F] [{|-}num] [{|-}caps] [{|-}scroll]参数&#xff1a;-F&#xff1a;预设的选项&#xff0c;设定虚拟主控台的状…...

前端入门:HTML5+CSS3+JAAVASCRIPT

1、 初识HTML HTML:Hyper Text Markup Language(超文本标记语言) 。 超文本包括&#xff1a;文字、图片、音频、视频、动画等。 1.1、W3C标准 1.2、HTML基本结构 示例&#xff1a; <!-- DOCTYPE:告诉浏览器&#xff0c;我们要使用什么规划&#xff0c;这里是HTML --> …...

【头歌实验】课外作业一:开通ECS及使用Linux命令

文章目录一、完成下列实验并截图二、简要回答“课堂考核”内容三、在头歌、华为云或阿里云官网上&#xff0c;找出自己的课外学习资源&#xff0c;制定小组的课程学习计划、专业学习计划。四、习题1.10一、完成下列实验并截图 1、实验《ECS云服务器新手上路》 https://develo…...

CMSIS-RTOS2 RTX5移植到GD32L233

1、CMSIS-RTOS2是什么&#xff1f; 关于CMSIS-RTOS2的官方描述如下&#xff1a; CMSIS-RTOS v2 &#xff08;CMSIS-RTOS2&#xff09; 为基于 Arm Cortex 处理器的设备提供通用 RTOS 接口。它为需要RTOS功能的软件组件提供了一个标准化的API&#xff0c;因此为用户和软件行业带…...

[网络原理] 网络中的基本概念

人生,本就是苦乐参半,这样的生活才是丰富多彩. 文章目录前言1. IP地址2. 端口号3. 协议4. 五元组5. 协议分层6. OSI七层模型7. TCP/IP协议8. 封装和分用9. 客户端与服务端10. 请求与响应前言 本章开始,我们开启网络部分的知识大门. 1. IP地址 1.定义: IP地址主要用于表示网络…...

BeanPostProcessor原理分析

文章目录一、BeanPostProcessor的作用1. 源码2. 使用案例二、Spring生命周期中的BeanPostProcessor三、BeanPostProcessor对PostConstruct的支持四、BeanPostProcessor中的顺序性五、总结一、BeanPostProcessor的作用 BeanPostProcessor提供了初始化前后回调的方法&#xff0c;…...

人工智能和网络安全,应该如何选择?

随着数字时代的到来&#xff0c;网络安全和人工智能成了科技创新产业的重要组成部分。也逐渐成了大多数人心中热门的行业选择。那么该如何抉择呢&#xff1f; 首先我们来了解下人工智能的发展前景&#xff1a; ​ 如今&#xff0c;人工智能技术无论是在核心技术方面&#xff0…...

Flink预加载分区维表,实时更新配置信息

当前我们的业务场景&#xff0c;是基于dataStream代码&#xff0c; 维表数据量很大&#xff0c; 实时性要求很高&#xff0c;所以采用预加载分区维表模式&#xff0c; kafka广播流实时更新配置。 实现方案 1&#xff1a;job初始化时 每个分区open 只加载自己那部分的配置&…...

大数据现在找工作难么

大数据行业工作好找还是难找不是光靠嘴说出来的结合实际&#xff0c;看看市场上的招聘需求和岗位要求就大致知道了 要想符合企业用人规范&#xff0c;学历&#xff0c;工作经验&#xff0c;掌握技能都是非常重要的~ 先来看几个招聘网站的报告数据&#xff1a; Boss直聘发布的…...

【Linux】学会这些基本指令来上手Linux吧

前言上篇文章介绍了一些常用的指令&#xff0c;这篇文章再来介绍一下Linux必须学会的指令。一.时间相关的指令ate显示date 指定格式显示时间&#xff1a; date %Y:%m:%d date 用法&#xff1a;date [OPTION]... [FORMAT]1.在显示方面&#xff0c;使用者可以设定欲显示的格式&am…...

【沐风老师】3DMAX交通流插件TrafficFlow使用方法详解

TrafficFlow交通流插件&#xff0c;模拟生成车流、人流动画。 【版本要求】 3dMax 2008及更高版本 【安装方法】 无需安装直接拖动插件脚本文件到3dMax视口中打开。 【快速开始】 1.创建车辆对象和行车路径。 2.打开TrafficFlow插件&#xff0c;先选择“车辆”对象&#xff0…...

c#实现视频的批量剪辑

篇首&#xff0c;完全没有技术含量的帖子&#xff0c;高手略过&#xff0c;只为十几年后重新捡起的我爱好玩玩。。。 起因&#xff0c;一个朋友说他下载了很多短视频&#xff0c;但只需要要其中的一小截&#xff0c;去头掐尾&#xff0c;在软件里搞来搞去太麻烦&#xff0c;让…...

小白怎么系统的自学计算机科学和黑客技术?

我把csdn上有关自学网络安全、零基础入门网络安全的回答大致都浏览了一遍&#xff0c;最大的感受就是“太复杂”&#xff0c;新手看了之后只会更迷茫&#xff0c;还是不知道如何去做&#xff0c;所以站在新手的角度去写回答&#xff0c;应该把回答写的简单易懂&#xff0c;“傻…...

scheduler 的使用实验对比和总结(PyTorch)

这篇文章是在完成 HW02 的过程中所产生的&#xff0c;是关于各 scheduler &#xff08;ReduceLROnPlateau()&#xff0c;CosineAnnealingLR()&#xff0c;CosineAnnealingWarmRestarts()&#xff09;使用的对比实验。 起因是为了在 Kaggle 上跑出更高的成绩&#xff0c;但结果确…...

vue2 虚拟列表(优化版)

作用&#xff1a; 虚拟列表是优化长列表的一种手段&#xff0c;防止列表存在过多的dom元素导致页面卡顿&#xff08;包扣移动端下拉到底加载下一页这种列表加载的dom元素多了一样会卡&#xff09;。 原理&#xff1a; 如上图简单地说就是以 <div classlist-view">作…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...