华为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:
- 首先,将line中的转义双引号、转义单引号去掉,避免影响成对双引号、成对单引号的判断
- 然后,将line中的成对双引号及其中内容、成对单引号及其中内容去除,这样可以简单粗暴的去除成对双引号、成对单引号中的注释符号、分号
- 之后,将line中注释内容(即:‘-’及其后内容)去掉,这样可以简单粗暴的去除注释中的分号
- 此时line中就只会剩下分号,我们需要处理一些特殊情况,比如空文本不能算语句,我们可以将li
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏给大家提供了华为2024最新华为OD 题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。