【华为OD题库-069】按单词下标区间翻转文章内容-java

news/2024/7/20 19:49:34 标签: 华为od, java

题目

题目描述:
输入一个英文文章片段,翻转指定区间的单词顺序,标点符号和普通字母一样处理。例如输入字符串“I am a developer.”,区间[0,3]则输出"developer. a am l"。
输入描述:
使用换行隔开三个参数
第一个参数为英文文章内容,即英文字符串
第二个参数为反转起始单词下标,下标从0开始
第三个参数为结束单词下标
输出描述:
反转后的英文文章片段,所有单词之间以—个半角空格分割进行输出
示例1
输入∶
l am a developer.
1
2
输出:
l a am developer.
示例2
输入∶
Hello world!
0
1
输出:
world! Hello
说明:
输入字符串可以在前面或者后面包含多余的空格,但是反转后的不能包含多余空格。
示例3
输入∶
I am a developer.
0
3
输出:
developer. a am l
说明:
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
示例4
输入:
Hello!
0
3
输出:
Hello!
说明:
指定反转区间只有一个单词,或无有效单词则统—输出原字符串。

思路

简单的字符处理题,可以利用栈的先入后出实现翻转,也可以利用双指针交换实现翻转

题解

java">package hwod;

import java.util.LinkedList;
import java.util.Scanner;

public class ReverseWord {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String content = sc.nextLine();
        int start = sc.nextInt();
        int end = sc.nextInt();
        System.out.println(reverseWord(content, start, end));
        System.out.println(reverseWord2(content, start, end));
    }

    //方案一:利用栈实现翻转
    private static String reverseWord(String content, int start, int end) {
        String[] arrs = content.trim().split("\\s+");
        start = Math.max(0, start);
        end = Math.min(arrs.length - 1, end);
        if (start >= end) return content; //题目未明确要求,此分支不处理多余空格
        LinkedList<String> stack = new LinkedList<>();
        StringBuilder sb = new StringBuilder();
        int i = 0;
        while (i < arrs.length) {
            if (i != 0) sb.append(" ");
            if (i < start || i > end) {
                sb.append(arrs[i]);
                i++;
            } else {
                while (start <= i && i <= end) {
                    stack.addLast(arrs[i]);
                    i++;
                }
                while (!stack.isEmpty()) {
                    sb.append(stack.removeLast());
                    if (!stack.isEmpty()) sb.append(" ");
                }
            }
        }
        return sb.toString();
    }

    //方案二:双指针翻转
    private static String reverseWord2(String content, int start, int end) {
        String[] arrs = content.trim().split("\\s+");
        start = Math.max(0, start);
        end = Math.min(arrs.length - 1, end);
        if (start >= end) return content; //题目未明确要求,此分支不处理多余空格
        while (start < end) {
            swap(arrs, start, end);
            start++;
            end--;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arrs.length; i++) {
            if (i != 0) sb.append(" ");
            sb.append(arrs[i]);
        }
        return sb.toString();

    }

    private static void swap(String[] arrs, int start, int end) {
        String tmp = arrs[start];
        arrs[start] = arrs[end];
        arrs[end] = tmp;
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。


http://www.niftyadmin.cn/n/5241518.html

相关文章

在AWS Lambda上部署EC2编译的FFmpeg工具——自定义层的方案

大纲 1 确定Lambda运行时环境1.1 Lambda系统、镜像、内核版本1.2 运行时1.2.1 Python1.2.2 Java 2 环境准备2.1 创建EC2实例 3 编译FFmpeg3.1 连接EC2 4 编译5 上传S3存储桶5.1 创建S3桶5.2 创建IAM策略5.3 创建IAM角色5.4 EC2关联角色5.5 修改桶策略5.6 打包并上传 6 创建Lamb…

制造企业建设数字工厂管理系统的难点主要有哪些

随着科技的飞速发展&#xff0c;制造企业正面临着从传统生产模式向数字化、智能化转型的挑战。其中&#xff0c;建设数字工厂管理系统是实现这一目标的重要途径。然而&#xff0c;在实际操作过程中&#xff0c;制造企业往往会遇到一系列难点。本文将对这些难点进行详细的分析。…

Python-炸弹人【附完整源码】

炸弹人 炸弹人是童年的一款经典电子游戏&#xff0c;玩家控制一个类似"炸弹人"的角色&#xff0c;这个角色可以放置炸弹&#xff0c;并在指定的时间内引爆它们消灭敌人以达到目标&#xff0c;此游戏共设有两节关卡&#xff0c;代码如下&#xff1a; 运行效果&#x…

【1day】蓝凌OA 系统datajson.js接口远程命令执行漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞概述 二、影响版本 三、资产测绘 四、漏洞复现

Kafka中的Topic

在Kafka中&#xff0c;Topic是消息的逻辑容器&#xff0c;用于组织和分类消息。本文将深入探讨Kafka Topic的各个方面&#xff0c;包括创建、配置、生产者和消费者&#xff0c;以及一些实际应用中的示例代码。 1. 介绍 在Kafka中&#xff0c;Topic是消息的逻辑通道&#xff0…

vue3项目中使用iconfont图标

vue3项目中使用iconfont图标 写前端项目时&#xff0c;经常要用到iconfont图标&#xff0c;我最原始的方法是吧iconfont图标下载为png/svg文件&#xff0c;然后在文件中作为资源引入&#xff0c;后来发现这么搞太不专业了 记录一下相对比较靠谱的使用方法 1.在iconfont中找到…

安装npm,配置国内源

下载地址 https://nodejs.cn/download/ 设置国内源 npm config set registry https://registry.npm.taobao.org --global npm config get registry

第二十一章 网络通信

21.1 网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。 局域网与互联网 服务器是指提供信息的计算机或程序&#xff0c;客户机是指请求信息的计算机或程序。网络用于连接服务器与客户机&#xff0c;实现两者间的相互通信。 网络协议 网络协议规定了计算…