JavaScript 熟悉赛码网笔试模式
很多互联网大厂的笔试都使用赛码网,上篇文章中有写到如何在本地按赛码网的输入用例编写代码。这篇文章通过两道题目来熟悉一下 JavaScript 在这种模式下的代码编写方式。下面的题目都可以在
赛码网-真题练习-在线编程
中找到
回文串(单行输入)
题目描述:给定一个字符串,问是否能够通过添加一个字母将其变成“回文串”。 “回文串”是指正着和反着读都一样的字符串。如:”aa”, ”bob”, ”testset” 是回文串,”alice”, ”time” 都不是回文串。
输入描述:如果输入字符串可以通过添加一个字符,则输出 ”YES”,否则输出 ”NO”
样例输入:coco
样例输出:Yes
题目思路:
-
如果一个字符串添加一个字符可以变成回文串,那么删除一个字符也能成为回文串
-
依次遍历字符串的每个字符,判断去掉当前字符生成的新字符串是否为回文串
-
如果是,则输出 Yes,遍历完每个字符没有输出 Yes,则输出 No
const read_line = require('readline-sync')
let input = read_line.question("")
function calRes(str) {
// 特例
if (str.length <= 1) {
console.log('Yes')
return
}
// 遍历每个字符,去掉当前字符生成新的字符,看是否为回文串
for (let i=0; i < str.length; i++) {
// i 前边的子字符串和后边的子字符串拼接成新的字符串
var neo = str.slice(0, i) + str.slice(i+1)
if (isPal(neo)) {
console.log('Yes')
return
}
}
console.log('No')
}
// 用来判断是否为回文串
function isPal(str) {
var rev = str.split('').reverse().join('')
return str === rev
}
calRes(input)
以上代码在本地编辑器中编写,提交到赛码网只需要将前两行略作修改
// const read_line = require('readline-sync')
let input = read_line()
如上所示,只需要注释掉第一行,第二行稍作修改,即可完美运行
询问字典序(多行输入)
题目描述:输入 n 个字符串 S1, S2, ..., Sn,对于第 i 个字符串,你需要回答在前 i-1 个字符串中,有多少个字符串的字典序严格比 Si 小。
样例输入:
5 one one two three four
样例输出:
0 0 2 2 0
题目思路:
- 每次读取输入都要与前边输入的字符串进行比较
- 第一次的时候可以与空串进行比较,然后 count - 1 就好
- 后边的每次比较结果也都要减去 1,每次比较完后都将当前输入存到一个用于比较的数组中
- 由于每次的比较结果是要在输入完成后才能输出,因此需要用数组存储一下
const read_line = require('readline-sync')
// 读取输入行数
let n = read_line.question("")
let res = ['']
let cal = []
// 循环 n 次
while (n--) {
// 读取每行输入的字符串
var input = read_line.question("")
var count = 0
for (let i = 0; i < res.length; i++) {
if (input > res[i]) {
count++
}
}
cal.push(--count)
res.push(input)
}
for (let e of cal) {
console.log(e)
}
额,感觉思路没问题,但是只 AC 了 72%...算了,大家简单看看思路就好,主要是练习一下输入输出。本地调试结果如下,跟给出的样例是一样的
提交的时候还是注释掉第一行,然后 read_line.question("")
改成 read_line()
即可