关于昨晚的牛客网前端模拟题的三个编程题答案交流

1.牛牛从生物科研工作者那里获得一段字符串数据s,牛牛需要帮助科研工作者从中找出最长的DNA序列。DNA序列指的是序列中只包括'A','T','C','G'。牛牛觉得这个问题太简单了,就把问题交给你来解决。
例如: s = "ABCBOATER"中包含最长的DNA片段是"AT",所以最长的长度是2。
while(line=readline()) {
      let length = 0, temp = '', reg = /[ATCG]/
      for (let i = 0; i < line.length; i++) {
        if (reg.test(line.charAt(i)) == true) {
          temp += line.charAt(i)
          length = temp.length > length ? temp.length : length
        } else {
          temp = ''
        }
      }
  console.log(length)
}
2.如果一个字符串由两个相同字符串连接而成,就称这个字符串是偶串。例如"xyzxyz"和"aaaaaa"是偶串,但是"ababab"和"xyzxy"却不是。
牛牛现在给你一个只包含小写字母的偶串s,你可以从字符串s的末尾删除1和或者多个字符,保证删除之后的字符串还是一个偶串,牛牛想知道删除之后得到最长偶串长度是多少。
while(line=readline()) {
    while (line.length > 0) {
          line = line.substring(0, line.length - 2)
          let mid = line.length / 2
          let left = line.substring(0, mid)
          let right = line.substring(mid)
          if (left == right) {
              console.log(line.length)
              break
          } 
      }
}
3.牛牛有一些字母卡片,每张卡片上都有一个小写字母,所有卡片组成一个字符串s。牛牛一直认为回文这种性质十分优雅,于是牛牛希望用这些卡片拼凑出一些回文串,但是有以下要求:
1、每张卡片只能使用一次
2、要求构成的回文串的数量最少
牛牛想知道用这些字母卡片,最少能拼凑出多少个回文串。
例如: s = "abbaa",输出1,因为最少可以拼凑出"ababa"这一个回文串
s = "abc", 输出3,因为最少只能拼凑出"a","b","c"这三个回文串
我的思路:
这个题我开始也没想明白怎么下手,受一个同学的启发,我们的目的不是找出回文字符串,而是根据回文字符串的特点来寻找答案,回文字符串既然是正着读反着读都一样,那说明能拼成回文字符串的字母是出现过偶数次的,但有一个元素可以例外,就是回文字符串中心点,比如‘abcba’。那我们到底该如何确定回文字符串的数量呢?答案就是出现过奇数次的字符个数-1+1 = 出现奇数次的字符的个数
减1是因为可以有一个出现奇数次的字符出现在回文字符串的中心点,+1是因为我们还用所有出现偶数次的字符拼成了一个回文串。
比如:‘abcdecada’ 组成其中一种格式就是: adcecda, b,a,答案就是3

while(line=readline()) {
    let arrLine = line.split('')
  let strNum = [], total = 1, res = 0
  for (let i = 0; i < arrLine.length; i++) {
    if (arrLine[i] != -1) {
      for (let j = i + 1; j < arrLine.length; j++) {
        if (arrLine[i] == arrLine[j]) {
          total ++
          arrLine[j] = -1
        }
      }
      strNum.push(total)
      total = 1
    }
  }
  for (let i = 0; i < strNum.length; i++) {
    if (strNum[i] % 2 != 0) {
      res++
    }
  }
  console.log(res)
} 
然后有一个彩色瓷砖的题,最后一个猜字谜正在苦思中。
4.牛牛喜欢彩色的东西,尤其是彩色的瓷砖。牛牛的房间内铺有L块正方形瓷砖。每块砖的颜色有四种可能:红、绿、蓝、黄。给定一个字符串S, 如果S的第i个字符是'R', 'G', 'B'或'Y',那么第i块瓷砖的颜色就分别是红、绿、蓝或者黄。
牛牛决定换掉一些瓷砖的颜色,使得相邻两块瓷砖的颜色均不相同。请帮牛牛计算他最少需要换掉的瓷砖数量。while(line=readline())
while(line=readline()) {
    let count = 0, i = 0
  while (i < line.length - 1) {
    if (line.charAt(i) == line.charAt(i+1)) {
      count ++
      i += 2
    } else {
      i++
    }
  }
  console.log(count)
}

#前端工程师#
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
点赞 9 评论
分享
牛客网
牛客企业服务