华为OD统一考试 - 文本统计分析

题目描述

有一个文件,包含以一定规则写作的文本,请统计文件中包含的文本数量。

规则如下:

1. 文本以”;”分隔,最后一条可以没有”;”,但空文本不能算语句,比如”COMMAND A; ;”只能算一条语句。注意,无字符/空白字符/制表符都算作”空”文本;

2. 文本可以跨行,比如下面,是一条文本,而不是三条;

COMMAND A

AND

COMMAND B;

3. 文本支持字符串,字符串为成对的单引号(')或者成对的双引号("),字符串可能出现用转义字符(\)处理的单双引号("your input is\"")和转义字符本身,比如

COMMAND A "Say \"hello\"";

4. 支持注释,可以出现在字符串之外的任意位置注释以”-“开头,到换行结束,比如:

COMMAND A; -this is comment

COMMAND -comment

A AND COMMAND B;

注意字符串内的”-“,不是注释。

输入描述

文本文件

输出描述

包含的文本数量

用例

输入

COMMAND TABLE IF EXISTS "UNITED STATE";

COMMAND A GREAT (

ID ADSAB,

download_length INTE-GER, -- test

file_name TEXT,

guid TEXT,

mime_type TEXT,

notifica-tionid INTEGER,

original_file_name TEXT,

pause_reason_type INTEGER,

resumable_flag INTEGER,

start_time INTEGER,

state INTEGER,

folder TEXT,

path TEXT,

total_length INTE-GER,

url TEXT

);

输出

2

说明

题目解析

梳理一下题目信息:

  • 一行中可以有多条文本,比如一行输入为:abc;abc;abc; 此时该行有三条文本。
  • 一条文本以分号结束
  • 成对双引号、成对单引号中的分号,无法作为一条文本结束的标志
  • 注释符号后面的分号,无法作为一条文本结束的标志
  • 成对双引号、成对单引号中的注释符号失效
  • 成对双引号、成对单引号中可能存在转义字符

本题要我们求解文本条数,其实可以转化为求解有效分号个数。

而无效分号,其实就是:

  • 成对双引号、成对单引号中的分号
  • 注释符号后面的分号

我的解题思路如下,假设一行字符串为line:

  1. 首先,将line中的转义双引号、转义单引号去掉,避免影响成对双引号、成对单引号的判断
  2. 然后,将line中的成对双引号及其中内容、成对单引号及其中内容去除,这样可以简单粗暴的去除成对双引号、成对单引号中的注释符号、分号
  3. 之后,将line中注释内容(即:‘-’及其后内容)去掉,这样可以简单粗暴的去除注释中的分号
  4. 此时line中就只会剩下分号,我们需要处理一些特殊情况,比如空文本不能算语句,我们可以将li

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试卷题 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD 题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。

全部评论

相关推荐

嗷佛快来快来快快快来:我当时就是听了别人的谣言,环境的大变,左右摇摆不定,到最后一事无成。我也给你提不了什么有效的建议,因为我自己就是败犬。但是我确实是从cpp转到了Java,cpp也做过项目,了解过具体的细分方向。如果你感兴趣,不会拦你。因为只要一件事情能坚持下去 就会发光
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务