667 亿元就业补贴下发,大学生就业形势和现在的秋招形势如何?从美团一面说起

随着高等教育的普及,大学毕业生的数量也逐年水涨船高,就业市场上的技术类岗位也越来越不足以满足大学毕业生的数量。

这让秋招和大学生就业呈现出越来越激烈的竞争形势,想要找到好工作就需要更强的实力。而就业环境的变好是需要时间的,不是一年两年就能快速改善的。

直到现在,很多的同学们依然是秋招 0 offer 的状态,果然是考得好不如早生两年。

CSDN - 本博客python入门笔记快捷下载

免费下载 - MySQL和Oracle的详细区别

CSDN - 本博客C++入门笔记快捷下载

今天带来在美团一面面试中曾经出现过的题目:

题目描述:

题号:394

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

图片

解题思路:

思路一:辅助栈

这个算法的关键:使用栈来保存嵌套的重复序列的信息。

每当遇到一个 '[',就将当前的解码状态和重复次数保存起来,并开始一个新的解码序列。每当遇到一个 ']',就将当前解码序列的结果根据之前保存的重复次数进行重复,并与之前的解码结果合并。

算法步骤:

  1. 初始化:

    • 首先,检查输入字符串是否为空。如果是,则直接返回空字符串。

    • 初始化两个栈(在Go中使用切片模拟):一个用于存储重复次数(subNum),另一个用于存储临时字符串(subStr)。

    • 初始化一个变量 sum 用于累加数字,以及一个变量 res 用于存储当前的解码结果。

  2. 遍历输入字符串:

    • 对于每个字符,首先检查它是否是一个数字。如果是,则更新 sum 变量。

    • 如果字符是 '[',这表示即将开始一个新的重复序列。此时,将当前的 sum 和 res 分别压入 subNum 和 subStr 栈,并重置 sum 和 res

    • 如果字符是 ']',这表示当前重复序列结束。从 subStr 栈中弹出上一个临时字符串 temp,从 subNum 栈中弹出重复次数 total。然后,将 res 重复 total 次并附加到 temp 上,最后将结果存回 res

    • 如果字符是字母(或其他非数字、非括号的字符),则直接将其附加到 res

  3. 返回结果:

    • 遍历完整个输入字符串后,res 中存储的就是最终的解码结果。返回 res

n 是输入字符串的长度,m 是解码后字符串的长度。

时间复杂度:O(n) 

空间复杂度:O(n + m)

C++


// C++
class Solution {
public:
    string decodeString(string s) {
        if(s.size() == 0) {
            return "";
        }
        stack<int> sub_num;
        stack<string> sub_str;
        int sum = 0;
        string res = "";
        for(auto ch : s) {
            if(ch >= '0' && ch <= '9') {    //处理数字
                sum = sum * 10 + (ch - '0');
            } else if(ch == '[') {          //[则入栈
                sub_num.push(sum);
                sum = 0;
                sub_str.push(res);
                res = "";
            } else if(ch == ']') {          //出栈处理
                string temp = sub_str.top();
                sub_str.pop();
                int total = sub_num.top();
                sub_num.pop();
                for(int i = 0; i < total; i++) {
                    temp += res;
                }
                res = temp;
            } else {                         //字符串处理
                res += ch;
            }
        }
        return res;
    }
};

go

// go
func decodeString(s string) string {
    if len(s) == 0 {  
    return ""  
  }  
  
  subNum := []int{}  
  subStr := []string{}  
  sum := 0  
  res := ""  
  
  for _, ch := range s {  
    if ch >= '0' && ch <= '9' { // 处理数字  
      sum = sum*10 + int(ch-'0')  
    } else if ch == '[' { // [ 则入栈  
      subNum = append(subNum, sum)  
      sum = 0  
      subStr = append(subStr, res)  
      res = ""  
    } else if ch == ']' { // 出栈处理  
      temp := subStr[len(subStr)-1]  
      subStr = subStr[:len(subStr)-1]  
      total := subNum[len(subNum)-1]  
      subNum = subNum[:len(subNum)-1]  
  
      for i := 0; i < total; i++ {  
        temp += res  
      }  
      res = temp  
    } else { // 字符串处理  
      res += string(ch)  
    }  
  }  
  
  return res  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值