Loading

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%...算了,大家简单看看思路就好,主要是练习一下输入输出。本地调试结果如下,跟给出的样例是一样的

image-20211103100152610

提交的时候还是注释掉第一行,然后 read_line.question("") 改成 read_line() 即可

posted @ 2021-11-03 10:05  neoscar  阅读(587)  评论(0编辑  收藏  举报