有效的括号长按键入验证外星语词典字符的最短距离用栈实现队列
迪丽瓦拉
2025-06-01 10:49:39
0次

有效的括号

来源:杭哥

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

bool isValid(char * s)
{int sz=strlen(s);char stack[sz];int k=0;for (int i=0;i
我想说:
  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
我想说:
  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;ialpha[*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=0 && ans[aa-1]==-1){ans[aa-1]=bb+1;tt++;queue[tt].a=aa-1;queue[tt].b=bb+1;}if (aa+1
我想说:
  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=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;ipushst);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;ipushst);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. 然后这边的话出数据的栈它里面的数据都是从入数据的栈那边倒过来的,然后等到你这个栈出数据如果出空了,就再从另外一个栈那边把数据给倒过来。在这个问题当中,两个栈的功能是极其明确的,是固定的。


相关内容

热门资讯

【甘快看•文化中国行】文博“站... 国庆假期,嘉峪关方特游人如织。文博场馆内,非遗技艺可看可感;山野村落间,田园风光令人心旷神怡;城市街...
江畔开演,嗦粉迎客!四川南充国... 封面新闻记者 刘彦君10 月 7 日,四川南充国庆假期文旅成绩单正式出炉:全市A级景区接待游客322...
国庆外骨骼助力器销售额涨12.... 【文/王力 编辑/吕栋】国庆假期,爬山这件事开始有了点“开外挂”的味道。过去登山装备是登山杖、护膝和...
这个假期,天衢新区活力拉满! 德百奥莱广场上,大型实景演出《德运星河》再度精彩上演;董子文化街里,祭董大典庄严肃穆,文化市集青春洋...
走进印尼帕达尔岛 俯瞰蓝色海洋   印尼科莫多国家公园的核心岛屿——帕达尔岛由古老火山喷发形成,登顶观景台,四片海湾同时铺展在眼前,...
美丽中国行·大河长歌|一河穿沙...   黄河自黑山峡奔涌而入,从甘肃进入宁夏首站中卫,在沙坡头,与腾格里沙漠迎面相拥,形成沙水交融、河漠...
来上海别只吃小笼包了!新场古镇... 在上海市浦东新区,有一座被称为“小小新场赛苏州”的古镇,你知道是哪一座古镇吗?它北靠上海迪士尼度假区...
双节文旅收官盘点:古韵山西破壁... 本报(chinatimes.net.cn)记者赵文娟 平遥、忻州、太原报道2026年中秋国庆双节叠加...
“双节”期间 河南全省博物馆接... 来源:中国新闻网中新网郑州10月8日电(记者 韩章云)10月8日,记者从河南省文物局获悉,中秋国 庆...
外媒关注国庆假期:消费市场持续... 来源:中国新闻网中新网10月7日电10月7日是2026年国庆假期的最后一天。假期旅游热潮吸引国际媒体...