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

看下华为今年校招薪资表。。。

0
分享至

专栏:50多种数据结构彻底征服

专栏:50多种经典图论算法全部掌握

最近在网上看到一篇文章,列出了华为的校招薪资,从学历来看,要求还挺高的,不过薪资给的也高。校招最多都能给到53.2万(无线算法),所以如果学历好的话,还是建议大家学算法,下面我们就来看一道华为的算法题。

--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第316题:去除重复字母。也是华为常考的一道算法题。

问题描述

来源:LeetCode第316题

难度:中等

给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。

示例1:


输入:s = "bcabc" 输出:"abc"

示例2:


输入:s = "cbacdcbc" 输出:"acdb"

  • 1 <= s.length <= 104

  • s 由小写英文字母组成

问题分析

这题是让 删除字符串 s 中的重复字符,使每个字符只出现一次,需要保证返回结果的字典序最小 ,并且还不能打乱字符的相对位置。

解决思路就是使用一个栈,然后遍历字符串中的每个字符,如果当前字符在栈中出现了就不用管了,因为每个字符只能出现一次。

如果当前字符在栈中没有出现,我们就需要把它添加到栈中,添加的时候因为要保证字典序最小,所以要和栈顶元素比较,如果当前字符比栈顶元素小并且栈顶元素在后面还会出现,就把栈顶元素给删除,接着继续重复上面的步骤。

举个例子,比如栈中元素是[a,b,e](右边是栈顶),当我们添加字符 c 的时候,因为栈顶字符 e 比当前字符 c 大:

1,假设字符串后面还有 e ,这个时候我们就可以把 e 给移除掉,在后面的时候可以在加 e 。

2,假设字符串后面没有 e 了,就不能把字符 e 给移除,因为移除之后,后面没有了就没法在添加了。

这里的关键点是怎么判断后面还有没有待移除的字符呢?很简单,我们只需要在开始的时候计算每个字符的个数即可,用掉一个就减去一个。最后栈中的字符就是需要返回的结果,我们还需要把他转化为字符串。

JAVA:

public String removeDuplicateLetters(String s) {
    Stack
       
  stk =  new Stack<>(); // 栈      int[] count =  new  int[ 128]; // 统计每个字符的数量      for ( int i =  0; i < s.length(); i++)         count[s.charAt(i)]++;      // 记录对应的字符有没有添加到栈中      boolean[] add =  new  boolean[ 128];      for ( char ch : s.toCharArray()) {         count[ch]--; // 遍历到当前字符,数量要减1          if (add[ch]) // 如果当前字符已经添加到栈中就跳过              continue;          // 如果当前字符没有添加到栈中,栈顶字符比当前字符大          // 并且栈顶字符在后面还有,就让栈顶字符出栈。          while (!stk.isEmpty() && stk.peek() > ch                 && count[stk.peek()] >  0) {             add[stk.pop()] =  false; // 标记为false         }         stk.push(ch); // 把当前字符添加到栈中         add[ch] =  true;     }      // 这里是把栈中的字符转化为字符串。     StringBuilder sb =  new StringBuilder();      while (!stk.isEmpty())         sb.append(stk.pop());      return sb.reverse().toString(); }

C++:

public:
    string removeDuplicateLetters(string s) {
        stack

  stk;// 栈         vector

  count(128);// 统计每个字符的数量         for (char ch: s)             count[ch]++;         // 记录对应的字符有没有添加到栈中         vector

  add(128, false);         for (char ch: s) {             count[ch]--;// 遍历到当前字符,数量要减1             if (add[ch])// 如果当前字符已经添加到栈中就跳过                 continue;             // 如果当前字符没有添加到栈中,栈顶字符比当前字符大             // 并且栈顶字符在后面还有,就让栈顶字符出栈。             while (!stk.empty() && stk.top() > ch && count[stk.top()] > 0) {                 add[stk.top()] = false;                 stk.pop();             }             stk.push(ch);// 把当前字符添加到栈中             add[ch] = true;         }         // 这里是把栈中的字符转化为字符串。         string str;         while (!stk.empty()) {             str.push_back(stk.top());             stk.pop();         }         reverse(str.begin(), str.end());         return str;     }



Python:

def removeDuplicateLetters(self, s: str) -> str:
    stk = []  # 栈
    count = Counter(s)  # 统计每个字符的数量
    # 记录对应的字符有没有添加到栈中
    add = [0] * 128
    for ch in s:
        count[ch] -= 1  # 遍历到当前字符,数量要减1
        if add[ord(ch)]:  # 如果当前字符已经添加到栈中就跳过
            continue
            '''              如果当前字符没有添加到栈中,栈顶字符比当前字符大             并且栈顶字符在后面还有,就让栈顶字符出栈。             '''
        while stk and stk[-1] > ch and count[stk[-1]] > 0:
            add[ord(stk[-1])] = 0  # 标记为false
            stk.pop()
        stk.append(ch)  # 把当前字符添加到栈中
        add[ord(ch)] = 1
        # 这里是把栈中的字符转化为字符串。
    return ''.join(stk)

笔者简介

博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以 下载我整理的1000多页的PDF算法文档 。

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

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.

相关推荐
热点推荐
离开东风十年后,“老将”郭振甫被查

离开东风十年后,“老将”郭振甫被查

国际金融报
2026-06-25 12:54:12
别再被误导了!南疆和北疆,根本是两个完全不同的世界

别再被误导了!南疆和北疆,根本是两个完全不同的世界

娱乐洞察点点
2026-06-24 15:58:58
痛心!四川男子3个子女全去世,家里一贫如洗,网友:风水不好

痛心!四川男子3个子女全去世,家里一贫如洗,网友:风水不好

小鋭有话说
2026-06-25 13:02:08
方媛参加综艺遭恶评,郭富城霸道护妻:她不是艺人,录节目让她认识到娱乐圈每个艺人都很辛苦;此前方媛在综艺中坚持要住男生单人间引热议

方媛参加综艺遭恶评,郭富城霸道护妻:她不是艺人,录节目让她认识到娱乐圈每个艺人都很辛苦;此前方媛在综艺中坚持要住男生单人间引热议

洪观新闻
2026-06-25 15:42:36
乌克兰摧毁莫斯科的太空通信中心!重创俄军火车站

乌克兰摧毁莫斯科的太空通信中心!重创俄军火车站

项鹏飞
2026-06-23 20:08:08
卢卡申科宣告长期离境,将与普京会面,权力交总理,白俄恐生变?

卢卡申科宣告长期离境,将与普京会面,权力交总理,白俄恐生变?

安珈使者啊
2026-06-24 22:04:35
红军时期,毛主席认为有两个人的才能远胜自己和朱德,曾主动让贤

红军时期,毛主席认为有两个人的才能远胜自己和朱德,曾主动让贤

新一说史
2026-06-14 06:09:58
最嚣张小三!山西,一女子出轨有妇之夫,做了小三,还招摇过市!

最嚣张小三!山西,一女子出轨有妇之夫,做了小三,还招摇过市!

川渝视觉
2026-06-25 16:11:30
2027款特斯拉Model Y L 全新图赏

2027款特斯拉Model Y L 全新图赏

热血体育社
2026-06-25 00:37:26
哈佛研究发现:人生回报率最高的一件事,培养一个输出型爱好

哈佛研究发现:人生回报率最高的一件事,培养一个输出型爱好

心理观察局
2026-06-24 07:49:11
江西高考分数线公布

江西高考分数线公布

界面新闻
2026-06-25 10:27:24
40亿巨款失踪案:一夜输掉6000万元,三任行长出逃美国!

40亿巨款失踪案:一夜输掉6000万元,三任行长出逃美国!

叮当当科技
2026-06-25 11:39:50
香港知名演员花光积蓄,送俩儿子出国留学,前妻因抑郁烧炭自杀

香港知名演员花光积蓄,送俩儿子出国留学,前妻因抑郁烧炭自杀

乡野小珥
2026-06-25 10:34:31
郑钦文回应输球:太阳晒得我无法专注 大脑没法思考 对手发球太好

郑钦文回应输球:太阳晒得我无法专注 大脑没法思考 对手发球太好

风过乡
2026-06-25 12:49:42
中国足坛6月24日迎来久违巨星!曾是英格兰队主力,已现身村超

中国足坛6月24日迎来久违巨星!曾是英格兰队主力,已现身村超

振刚说足球
2026-06-25 10:01:32
北京40岁老板花3000万捡漏四合院,院子墙角莫名渗水,挖开后傻眼

北京40岁老板花3000万捡漏四合院,院子墙角莫名渗水,挖开后傻眼

白云故事
2025-06-17 08:35:23
“想砍鸡没鸡砍了”,天热+流量退去,广东莫氏鸡煲以前日销200只现在不足20只…

“想砍鸡没鸡砍了”,天热+流量退去,广东莫氏鸡煲以前日销200只现在不足20只…

广东活动
2026-06-25 12:35:57
超市月薪才2800元,为啥却几乎没人辞职?内部员工:傻子才会走

超市月薪才2800元,为啥却几乎没人辞职?内部员工:傻子才会走

平说财经
2026-06-24 01:51:50
CBA最新消息!曝杜锋离开广东宏远,山西男篮争议后卫离队

CBA最新消息!曝杜锋离开广东宏远,山西男篮争议后卫离队

体坛瞎白话
2026-06-25 14:11:11
聚焦|马宁执裁水准获双重认可,有望再度主哨世界杯

聚焦|马宁执裁水准获双重认可,有望再度主哨世界杯

北青网-北京青年报
2026-06-25 09:56:09
2026-06-25 16:52:49
数据结构和算法
数据结构和算法
专门介绍和写算法题解的号
273文章数 4关注度
往期回顾 全部

教育要闻

很多地方中招都在扩招,以确保大多数孩子都能考上高中!

头条要闻

爆冷输球后韩国记者追问球队是否食物中毒 主教练回应

头条要闻

爆冷输球后韩国记者追问球队是否食物中毒 主教练回应

体育要闻

世界杯最动人一吻:我若离世 你就改嫁吧

娱乐要闻

这国产剧太装了,居然还热播第一?

财经要闻

财报炸裂!美光让空头闭嘴

科技要闻

宇树机器人大降价

汽车要闻

2027款星途ES 天马1:11:36背后的实力

态度原创

旅游
教育
数码
艺术
军事航空

旅游要闻

长龙卧波映碧水 枣庄东江特大桥夏日风光美如画

教育要闻

22万人围观AI志愿填报,这背后透露了什么信号?

数码要闻

Max同款!REDMI K90至尊版搭载8550mAh电池+100W快充

艺术要闻

2026年第三届全国大学生美术作品展 油画选(一)

军事要闻

特朗普:现在到了关注朝鲜问题的时候了

无障碍浏览 进入关怀版