(B卷,200分)- 查字典(Java & JS & Python & C)

题目描述

输入一个单词前缀和一个字典,输出包含该前缀的单词

输入描述

单词前缀+字典长度+字典
字典是一个有序单词数组
输入输出都是小写

输出描述

所有包含该前缀的单词,多个单词换行输出

若没有则返回-1

用例

输入 b 3 a b c
输出 b
说明
输入 abc 4 a ab abc abcd
输出

abc

abcd

说明
输入 a 3 b c d
输出 -1
说明

题目解析

这题200分的,但是感觉很简单,难道有坑?

我感觉这题就是考察字符串的基本操作,一个startsWith方法。

Java解法中,考虑大数量级,输入处理不使用next,nextInt获取,而是用nextLine整行获取。


2023.07.29

仅仅用startsWith方法通过率只有80%,

有考友反馈是没有判断word和prefix的长度关系,即当word.length < prefix.length,则不需要进行startsWith判断。

但是startsWith底层其实是优先做了这个判断的,比如Java源码中:

因此,判断如果使用了startsWith,则判断word.length < prefix.length是冗余的。

本题的问题应该是,我将输入获取的内容存储起来,然后传入了核心代码getResult中,因此可能超出了内存限制。

这题我们应该边获取输入,边判断,这样才是内存最优的。

JS算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
  const tmp = line.split(" ");
  const prefix = tmp[0];

  let find = false;
  const n = parseInt(tmp[1]);

  for (let i = 0; i < n; i++) {
    const word = tmp[i + 2];

    if (word.startsWith(prefix)) {
      find = true;
      console.log(word);
    }
  }

  if (!find) console.log(-1);
});

Java算法源码

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    String prefix = sc.next();

    boolean find = false;

    int n = sc.nextInt();
    for (int i = 0; i < n; i++) {
      String word = sc.next();

      if (word.startsWith(prefix)) {
        find = true;
        System.out.println(word);
      }
    }

    if (!find) System.out.println(-1);
  }
}

Python算法源码

# 输入获取
tmp = input().split()

prefix = tmp[0]
n = int(tmp[1])

find = False
for i in range(n):
    word = tmp[i+2]

    if word.startswith(prefix):
        find = True
        print(word)

if not find:
    print(-1)

C算法源码

#include <stdio.h>
#include <string.h>

#define MAX_LEN 1000

int main() {
    char prefix[MAX_LEN];
    scanf("%s", prefix);

    int n;
    scanf("%d", &n);

    int isFind = 0;

    for(int i=0; i<n; i++) {
        char word[MAX_LEN];
        scanf("%s", word);

        if(strncmp(prefix, word, strlen(prefix)) == 0) {
            isFind = 1;
            puts(word);
        }
    }

    if(!isFind) {
        puts("-1");
    }

    return 0;
}

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?