携程9.8算法 ak 分享题解

不知道携程hc还多不多,反正题目真的不难,连我等渣渣都可以出来写题解了……orz
反观隔壁投的携程开发的同学,根据大家的讨论,好像题目出的还是比较难的😅😅

  1. 题目意思大概就是,两个字符串S1和S2,找出其中最长的子串X,该子串可以通过重复拼接自己的方式,得到S1和S2.
  • 代码如下:
    s1 = input()
    s2 = input()
    find_flag = False
    
    n1 = len(s1)
    n2 = len(s2)
    
    if n1 < n2:
      s1, s2 = s2, s1
      n1, n2 = n2, n1
    
    for i in range(n2, 0, -1):
      if n1 % i == 0 and n2 % i == 0:
          if s2[:i] * (n1 // i) == s1 and s2[:i] * (n2 // i) == s2:
              print(s2[:i])
              find_flag = True
              break
    
    if find_flag == False:
      tmp = ""
      print(tmp)
  1. 题目意思,就是斜着输出矩阵。
  • 代码如下:

    r, w = map(int, input().split())
    res = [ [0 for i in range(w)] for j in range(r) ]
    cnt = 1
    
    for i in range(r+w-1):
      row, col = i, 0
      while(col <= (w-1) and row >= 0):
          if row < r and col >=0:
              res[row][col] = cnt 
              cnt += 1
    
          row -= 1
          col += 1 
    print(res)
  1. 题目的意思是,对字符串进行编码,并且题目指定了编码规则。具体规则大概意思就是a对应1,b对应2,……,z对应26,A对应27,B对应28,……,Z对应52,0对应53,……,9对应62(要把这里的对应结果转为二进制)。
  • 代码如下:

    s = input()
    nums  = list(s)
    
    string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    dic = {}
    cnt = 1
    
    for i in string:
      dic[i] = cnt 
      cnt +=1
    
    res = []
    tmp = "00"
    
    for i in range(len(nums)):
      if i % 5 == 0 and i!= 0:
          res.append(tmp)
          tmp = "00"
    
      if nums[i] not in string:
          tmp += '000000'
          continue
      else:
          tmp_ord = ""
          nn = dic[nums[i]]
          for _ in range(6):
              if nn == 0:
                  tmp_ord += '0'
              else:
                  tmp_ord += str(nn%2)
                  nn = nn // 2
    
          tmp_ord = tmp_ord[::-1]
          tmp += tmp_ord
    
    res.append(tmp)
    res_1 = []
    
    for i in res:
      res_1.append(int(i,2))  print( " ".join([str(i) for i in res_1]))

我的思路不一定是最优的,欢迎大家交流。

最后加个投票


#笔试题目##携程#
全部评论
反正对了两个也没有后续
点赞 回复 分享
发布于 2020-09-20 15:42
题一样,可难死我了!dl太谦虚了
点赞 回复 分享
发布于 2020-09-08 22:12
一般多少进面试
点赞 回复 分享
发布于 2020-09-08 22:03
代码缩进有几行编辑的有点问题,第一题和第三题的print语句应该在缩进的最外层
点赞 回复 分享
发布于 2020-09-08 21:27

相关推荐

从小父母离异家里没人管,靠着心里的不安和学校的环境也算是坚持到了学有所成的地步。到了大学环境开始松散不知道该做什么,只觉得在不挂科的基础上能往上考多少就考多少,等到秋招来临才发现自己有多么幼稚无能,今年九月份初才发现自己原来连一个求职的方向都没有。因为之前做过前后端一体的课设,算是有过了解,而对于其他岗位连做什么都不知道,因此这一个半个月在越来越焦虑的同时埋头苦学,事到如今想要活下去我似乎只能走前端这条路了,9月初先是靠着虚假夸大能力的简历得到一些笔试来确定了考察的方向,有一个大厂的无笔试面试最终是拒绝了没有勇气去面对。然后在这个基础上埋头苦学,如今也算是搭好了自己前端学习的框架和思考的瞄,可以逐渐给自己扩展新的知识和能力了,但这并不是一件多好的事儿,因为我发现学的越多越焦虑,学的越多便越无力。因为我感觉我如今努力学习的知识都是竞争对手们早就掌握了的东西,我如今困惑追求答案的难题早就被别人解决。别人早就能得心应手地做出项目而我连思考都会卡壳,看着别人的笔试和面经上那些闻所未闻的题目,我才知道别人到底有多强而我有多幼稚,我什么时候才能达到别人那种堪称熟练的能力呢?而且网上的焦虑越多越多,即便是真有这么高的能力最后也大概落得一个低薪打工人的下场,我真的感到迷茫。秋招都快结束了,而我还在继续痛苦的学习之旅,这些天找前端面试发现似乎问的有些简单跟网上搜到的内容不符(可能因为并不是大厂),我是不是本来就没打算被招所以别人懒得细问呢?我不知道,我只能继续总结下去学习下去,不管如何我都要活下去,如果我能早一些准备就好了,如果暑假能意识到现在这个情况就好了,可惜没有如果。种下一棵树的最好时间是十年前,其次是现在,虽然我相信自己的学习能力,但已经错过了最好的时机,只能在焦虑与痛苦中每天坚持学下去。目前的路还有很长很长,先去把typescript看了,再去巩固vue3的基础,再去练习elementui的使用,如果这能找到实习的话就好了。接下来呢?去学uniapp和小程序,不管如何我都要对得起曾经努力的自己。即便我们都感到痛苦,但我心中还是希望我们都能靠自己的努力来获取自己想要的幸福。
紧张的牛牛等一个of...:在担心什么呢,有一手985的学历在,就算是小厂别人都会要的,咱们双非的人更多,多少还在沉沦的,怕什么了
一句话证明你在找工作
点赞 评论 收藏
分享
10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务