关于昨晚的牛客网前端模拟题的三个编程题答案交流
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) }
#前端工程师#