【华为OD机试2023】去除多余空格 Java Python

【华为OD机试2023】去除多余空格 Java Python

前言

如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议!

本文解法非最优解(即非性能最优),不能保证通过率。

Tips1:机试为ACM 模式

你的代码需要处理输入输出,input/cin接收输入、print/cout 格式化输出

Tips2:机试按通过率算分

复杂题目可以考虑暴力破解,再逐步优化,不是运行超时就无法得分,比如一个分数为200的题目,当前通过率为50%,那么最终分数就是200*50%=100分

题目

题目描述

去除文本多余空格,但不去除配对单引1号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束

下标。

条件约束:

1,不考虑关键词起始和结束位置为空格的场景;

2,单词的的开始和结束下标保证涵盖一个完整的单词,即一个坐标对开始和结束下标之间不会有多余的空格;

3,如果有单引1号,则用例保证单引1号成对出现;

4,关键词可能会重复;

5,文本字符长度length取值范国: [0, 100000];

输入描述

输入为两行字符串:

第一行:待去除多余空格的文本,用例保证如果有单引1号,则单引1号成对出现,且单引1号可能有多对。

第二行:关键词的开始和结束坐标,关键词间以逗号区分,关键词内的开始和结束位置以单空格区分。

输出描述

输出为两行字符串:

第一行:夫除多余空格后的文本

第二行:去除多余空格后的关键词的坐标开始和结束位置,为数组方式输出。

补充说明

示例

Life is painting a  picture, not doing 'a sum'.
8 15,20 26,43 45

Life is painting a picture, not doing 'a sum'.
[8, 15][19, 25][42, 44]

代码

s = input()
arr = [list(map(int, x.split())) for x in input().split(",")]

quote_start = False
need_del = []

for i, c in enumerate(s):
    if c == ' ' and s[i - 1] == ' ' and not quote_start:
        need_del.append(i)
    if c == "'":
        quote_start = not quote_start

s_arr = list(s)
ans = [row.copy() for row in arr]

for d in need_del:
    s_arr[d] = ''
    for i, row in enumerate(arr):
        if d < row[0]:
            ans[i][0] -= 1
            ans[i][1] -= 1

print("".join(s_arr))
print("".join(list(map(lambda x: str(x), ans))))

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

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

        String s = scanner.nextLine();
        String[] parts = scanner.nextLine().split(",");

        List<List<Integer>> arr = new ArrayList<>();
        for (String part : parts) {
            String[] nums = part.trim().split(" ");
            List<Integer> row = new ArrayList<>();
            for (String num : nums) {
                row.add(Integer.parseInt(num));
            }
            arr.add(row);
        }

        boolean quote_start = false;
        List<Integer> need_del = new ArrayList<>();

        char[] s_arr = s.toCharArray();
        List<List<Integer>> ans = new ArrayList<>();
        for (List<Integer> row : arr) {
            ans.add(new ArrayList<>(row));
        }

        for (int i = 0; i < s_arr.length; i++) {
            char c = s_arr[i];
            if (c == ' ' && s_arr[i - 1] == ' ' && !quote_start) {
                need_del.add(i);
            }
            if (c == '\'') {
                quote_start = !quote_start;
            }
        }

        for (int d : need_del) {
            s_arr[d] = ' ';
            for (int i = 0; i < arr.size(); i++) {
                List<Integer> row = arr.get(i);
                if (d < row.get(0)) {
                    ans.get(i).set(0, ans.get(i).get(0) - 1);
                    ans.get(i).set(1, ans.get(i).get(1) - 1);
                }
            }
        }

        System.out.println(String.valueOf(s_arr));
        for (List<Integer> row : ans) {
            System.out.print(Arrays.toString(row.toArray()));
        }
    }
}

你可能感兴趣的:(华为,java,开发语言)