地址: 2017年校招全國統一模擬筆試(第五場)編程題集合
若是一個字符串由兩個相同字符串鏈接而成,就稱這個字符串是偶串。例如"xyzxyz"和"aaaaaa"是偶串,可是"ababab"和"xyzxy"卻不是。
牛牛如今給你一個只包含小寫字母的偶串s,你能夠從字符串s的末尾刪除1和或者多個字符,保證刪除以後的字符串仍是一個偶串,牛牛想知道刪除以後獲得最長偶串長度是多少。編程
輸入描述:
輸入包括一個字符串s,字符串長度length(2 ≤ length ≤ 200),保證s是一個偶串且由小寫字母構成測試
輸出描述:
輸出一個整數,表示刪除以後能獲得的最長偶串長度是多少。保證測試數據有非零解ui
輸入例子1:debug
abaababaab
輸出例子1:code
6
var readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', function(line) { var str = line.trim(); str = strWithoutLast(str); while(str.length){ if(str.length & 1 === 1){ str = strWithoutLast(str); } if(isEvenStr(str)){ console.log(str.length); break; } else { str = strWithoutLast(str); } } function isEvenStr(str){ var len = str.length; var left = str.slice(0, len / 2); var right = str.slice(len / 2, len); return left === right; } function strWithoutLast(str){ var len = str.length; return str.slice(0, len - 1); } });
牛牛有一些字母卡片,每張卡片上都有一個小寫字母,全部卡片組成一個字符串s。牛牛一直認爲迴文這種性質十分優雅,因而牛牛但願用這些卡片拼湊出一些迴文串,可是有如下要求:
一、每張卡片只能使用一次
二、要求構成的迴文串的數量最少
牛牛想知道用這些字母卡片,最少能拼湊出多少個迴文串。
例如: s = "abbaa",輸出1,由於最少能夠拼湊出"ababa"這一個迴文串
s = "abc", 輸出3,由於最少只能拼湊出"a","b","c"這三個迴文串遊戲
輸入描述:
輸入包括一行,一個字符串s,字符串s長度length(1 ≤ length ≤ 1000).
s中每一個字符都是小寫字母字符串
輸出描述:
輸出一個整數,即最少的迴文串個數。get
輸入例子1:input
abc
輸出例子1:it
3
var readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', function(line) { var alpha = 26; var strArr = line.trim().split(''); var arr = []; var odd = 0; while(alpha){arr.push(0); alpha--;} for(var i = 0, len = strArr.length; i < len; i++){ var index = strArr[i].charCodeAt(0) - 97; arr[index]++; } arr.forEach(function(item){ if(item & 1 === 1){ odd++; } }); console.log(odd); });
牛牛和羊羊在玩一個有趣的猜數遊戲。在這個遊戲中,牛牛玩家選擇一個正整數,羊羊根據已給的提示猜這個數字。第i個提示是"Y"或者"N",表示牛牛選擇的數是不是i的倍數。
例如,若是提示是"YYNYY",它表示這個數使1,2,4,5的倍數,但不是3的倍數。
注意到一些提示會出現錯誤。例如: 提示"NYYY"是錯誤的,由於全部的整數都是1的倍數,因此起始元素確定不會是"N"。此外,例如"YNNY"的提示也是錯誤的,由於結果不多是4的倍數但不是2的倍數。
如今給出一個整數n,表示已給的提示的長度。請計算出長度爲n的合法的提示的個數。
例如 n = 5:
合法的提示有:
YNNNN YNNNY YNYNN YNYNY YYNNN YYNNY
YYNYN YYNYY YYYNN YYYNY YYYYN YYYYY
因此輸出12
輸入描述:
輸入包括一個整數n(1 ≤ n ≤ 10^6),表示已給提示的長度。
輸出描述:
輸出一個整數,表示合法的提示個數。由於答案可能會很大,因此輸出對於1000000007的模
輸入例子1:
5
輸出例子1:
12
var readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', function(line) { var mod = 1000000007; var ans = 1; var n = parseInt(line.trim()); var vis = []; debugger; for(var i = 2; i <= n; i++){ if(vis[i]) continue; for(var j = 2 * i; j <= n; j += i){ vis[j] = 1; } var tmp = n; var cnt = 0; while(tmp >= i){ tmp /= i; cnt++; } ans = ans * (cnt + 1) % mod; } console.log(ans); });
DNA片斷
時間限制:1秒
空間限制:32768K
牛牛從生物科研工做者那裏得到一段字符串數據s,牛牛須要幫助科研工做者從中找出最長的DNA序列。DNA序列指的是序列中只包括'A','T','C','G'。牛牛以爲這個問題太簡單了,就把問題交給你來解決。
例如: s = "ABCBOATER"中包含最長的DNA片斷是"AT",因此最長的長度是2。
輸入描述:
輸入包括一個字符串s,字符串長度length(1 ≤ length ≤ 50),字符串中只包括大寫字母('A'~'Z')。
輸出描述:
輸出一個整數,表示最長的DNA片斷
輸入例子1:
ABCBOATER
輸出例子1:
2
var readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', function(line) { var str = line.trim(); var len = line.match(/[ATCG]*/g).reduce(function(a, b){ return a < b.length ? b.length : a; }, 0); console.log(len); });
牛牛喜歡彩色的東西,尤爲是彩色的瓷磚。牛牛的房間內鋪有L塊正方形瓷磚。每塊磚的顏色有四種可能:紅、綠、藍、黃。給定一個字符串S, 若是S的第i個字符是'R', 'G', 'B'或'Y',那麼第i塊瓷磚的顏色就分別是紅、綠、藍或者黃。
牛牛決定換掉一些瓷磚的顏色,使得相鄰兩塊瓷磚的顏色均不相同。請幫牛牛計算他最少須要換掉的瓷磚數量。
輸入描述:
輸入包括一行,一個字符串S,字符串長度length(1 ≤ length ≤ 10),字符串中每一個字符串都是'R', 'G', 'B'或者'Y'。
輸出描述:
輸出一個整數,表示牛牛最少須要換掉的瓷磚數量
輸入例子1:
RRRRRR
輸出例子1:
3
var readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', function(line) { var str = line.trim(); var arr = str.match(/([RGBY])\1+/g); var num = 0; if(arr){ num = arr.reduce(function(a, b){ return Math.floor(b.length / 2) + a; }, 0); } console.log(num); });