当前位置: 首页 > news >正文

【2024华为OD-E卷-100分-字符串分割】(题目+思路+JavaC++Python解析)

题目

字符串分割

给定一个字符串 s 和一个整数 k,你需要将字符串 s 分割成恰好 k 个非空子字符串,使得这些子字符串中字典序最大的子字符串尽可能小。

输入

  • 第一行输入一个字符串 s(只包含小写字母)。
  • 第二行输入一个整数 k。

输出

  • 输出恰好 k 个子字符串,使得这些子字符串中字典序最大的子字符串尽可能小。

示例

  • 输入:

abacabadabacaba
4

  • 输出:

aba
cab
ada
bacaba

思路

这个问题类似于贪心算法的一个应用。我们需要找到一个平衡点,使得分割后的子字符串中字典序最大的那个尽可能小。为了实现这一点,我们可以从字符串的开头开始,逐步增加子字符串的长度,直到满足以下条件之一:

  1. 如果继续增加当前子字符串的长度会导致剩余的子字符串数量少于 k-1 个(因为还需要至少一个子字符串来容纳剩余的部分),则停止增加当前子字符串的长度,并开始一个新的子字符串。
  2. 如果当前子字符串已经是字典序最大的可能选择(即继续增加长度会导致字典序变大),则停止增加当前子字符串的长度,并开始一个新的子字符串。

为了实现这个策略,我们可以使用一个双指针的方法来模拟分割过程,同时维护一个字典序的比较器来确定何时停止增加当前子字符串的长度。

Java 编码解析

import java.util.Scanner;

public class StringSplit {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int k = scanner.nextInt();
        scanner.close();
        
        String[] result = splitString(s, k);
        for (String part : result) {
            System.out.println(part);
        }
    }
    
    public static String[] splitString(String s, int k) {
        int n = s.length();
        String[] result = new String[k];
        int start = 0;
        
        for (int i = 0; i < k - 1; i++) {
            int maxLen = (n - start) / (k - i); // Maximum length to keep balance
            int end = findBestEnd(s, start, start + maxLen - 1);
            result[i] = s.substring(start, end + 1);
            start = end + 1;
        }
        result[k - 1] = s.substring(start); // The last substring takes the remaining part
        
        return result;
    }
    
    private static int findBestEnd(String s, int start, int maxEnd) {
        String best = s.substring(start, start + 1); // Start with the smallest possible substring
        int bestEnd = start;
        
        for (int end = start + 1; end <= maxEnd; end++) {
            String candidate = s.substring(start, end + 1);
            if (candidate.compareTo(best) <= 0) {
                best = candidate;
                bestEnd = end;
            }
        }
        
        return bestEnd;
    }
}

C++ 编码解析

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<string> splitString(const string& s, int k) {
    int n = s.length();
    vector<string> result(k);
    int start = 0;
    
    for (int i = 0; i < k - 1; ++i) {
        int maxLen = (n - start) / (k - i); // Maximum length to keep balance
        int end = findBestEnd(s, start, start + maxLen - 1);
        result[i] = s.substr(start, end - start + 1);
        start = end + 1;
    }
    result[k - 1] = s.substr(start); // The last substring takes the remaining part
    
    return result;
}

int findBestEnd(const string& s, int start, int maxEnd) {
    string best = s.substr(start, 1); // Start with the smallest possible substring
    int bestEnd = start;
    
    for (int end = start + 1; end <= maxEnd; ++end) {
        string candidate = s.substr(start, end - start + 1);
        if (candidate <= best) {
            best = candidate;
            bestEnd = end;
        }
    }
    
    return bestEnd;
}

int main() {
    string s;
    int k;
    cin >> s >> k;
    
    vector<string> result = splitString(s, k);
    for (const string& part : result) {
        cout << part << endl;
    }
    
    return 0;
}

Python 编码解析

def split_string(s, k):
    n = len(s)
    result = []
    start = 0
    
    for i in range(k - 1):
        max_len = (n - start) // (k - i)  # Maximum length to keep balance
        end = find_best_end(s, start, start + max_len - 1)
        result.append(s[start:end + 1])
        start = end + 1
    
    result.append(s[start:])  # The last substring takes the remaining part
    
    return result

def find_best_end(s, start, max_end):
    best = s[start:start + 1]  # Start with the smallest possible substring
    best_end = start
    
    for end in range(start + 1, max_end + 1):
        candidate = s[start:end + 1]
        if candidate <= best:
            best = candidate
            best_end = end
    
    return best_end

if __name__ == "__main__":
    s = input().strip()
    k = int(input().strip())
    
    result = split_string(s, k)
    for part in result:
        print(part)

相关文章:

【2024华为OD-E卷-100分-字符串分割】(题目+思路+JavaC++Python解析)

题目 字符串分割 给定一个字符串 s 和一个整数 k&#xff0c;你需要将字符串 s 分割成恰好 k 个非空子字符串&#xff0c;使得这些子字符串中字典序最大的子字符串尽可能小。 输入&#xff1a; 第一行输入一个字符串 s&#xff08;只包含小写字母&#xff09;。第二行输入一…...

MCP Server开发的入门教程(python和pip)

使用python技术栈开发的简单mcp server 需要安装 MCP server的需要使用python-sdk,python需要 3.10,安装如下 pip install mcpPS: MCP官方使用的是uv包管理工具,我平时使用pip比较多,所以文中以pip为主。因为mcp的一些依赖包版本并不是最新的,所以最好弄一个干净的环境…...

我的年度总结

这一年的人生起伏&#xff1a;从曙光到低谷再到新的曙光 其实本来没打算做年度总结的&#xff0c;无聊打开了帅帅的视频&#xff0c;结合自己最近经历的&#xff0c;打算简单聊下。因为原本打算做的内容会是一篇比较丧、低能量者的呻吟。 实习生与创业公司的零到一 第一段工…...

48_Lua错误处理

在编写Lua应用时,都可能会遇到不可预见的错误,而错误处理是确保程序稳定性和健壮性的关键环节。有效的错误处理不仅能防止程序崩溃,还能提供有用的反馈信息给开发者或最终用户,从而提高应用程序的质量。本文将详细介绍Lua中的错误处理机制。 1.错误类型 Lua中的错误类型主…...

掌握 React 关键:理解 super () 和 super (props) 的不同应用

在 React 中&#xff0c;super() 和 super(props) 都与 React 类组件的构造函数&#xff08;constructor&#xff09;以及继承有关。为了理解它们之间的区别&#xff0c;我们需要了解 JavaScript 类继承机制以及 React 类组件的工作原理。 1. super() 与 super(props) 的区别 …...

type 属性的用途和实现方式(图标,表单,数据可视化,自定义组件)

1.图标类型 <uni-icon>组件中&#xff0c;type可以用来指定图标的不同样式。 <uni-icons type"circle" size"30" color"#007aff"></uni-icons> //表示圆形 <uni-icons type"square" size"30" co…...

scala基础学习_方法函数

文章目录 方法与函数函数&#xff08;又称函数值/匿名函数&#xff09;定义方法注意 单参数函数多参数函数函数作为参数传递 方法将方法转换为函数方法的返回值总结 方法与函数 函数&#xff08;又称函数值/匿名函数&#xff09; 定义在任何地方&#xff1a;函数可以定义在类…...

linux: 文本编辑器vim

文本编辑器 vi的工作模式 (vim和vi一致) 进入vim的方法 方法一:输入 vim 文件名 此时左下角有 "文件名" 文件行数,字符数量 方法一: 输入 vim 新文件名 此时新建了一个文件并进入vim,左下角有 "文件名"[New File] 灰色的长方形就是光标,输入文字,左下…...

《深入理解Mybatis原理》Mybatis中的缓存实现原理

一级缓存实现 什么是一级缓存&#xff1f; 为什么使用一级缓存&#xff1f; 每当我们使用MyBatis开启一次和数据库的会话&#xff0c;MyBatis会创建出一个SqlSession对象表示一次数据库会话。 在对数据库的一次会话中&#xff0c;我们有可能会反复地执行完全相同的查询语句&…...

【Debug】django.db.utils.OperationalError: (1040, ‘Too many connections‘)

报错&#xff1a; django.db.utils.OperationalError: (1040, ‘Too many connections‘) 排查 可能是Mysql的连接数量超过了允许的最大连接数量&#xff1b; 查看Mysql允许最大连接数量&#xff1a; -- 查看允许连接的最大数量 SHOW VARIABLES LIKE %max_connections%;-- 查…...

常用教程备份

1.Ubuntu 系统软件安装教程 https://blog.csdn.net/weixin_51591021/article/details/134363237 2.Docker 教程 https://blog.csdn.net/weixin_51591021/article/details/134363849 3.Makefile 教程 https://blog.csdn.net/weixin_51591021/article/details/134363638 4.…...

什么是视频孪生智慧能源?视频孪生智慧能源的应用案例

‌视频孪生智慧能源是集三维地理信息系统、视频虚实融合、数字孪生、人工智能等多技术于一体的综合应用&#xff0c;旨在实现对能源系统的实时、动态、全方位监控和管理‌。 具体来说&#xff0c;视频孪生智慧能源通过以下方式实现其功能&#xff1a; ‌技术融合‌&#xff1a;…...

Kubernetes1.28 编译 kubeadm修改证书有效期到 100年.并更新k8s集群证书

文章目录 前言一、资源准备1. 下载对应源码2.安装编译工具3.安装并设置golang 二、修改证书有效期1.修改证书有效期2.修改 CA 证书有效期 三、编译kubeadm四、使用新kubeadm方式1.当部署新集群时,使用该kubeadm进行初始化2.替换现有集群kubeadm操作 前言 kubeadm 默认证书为一…...

时序数据库的订阅对比:TDengine vs InfluxDB 谁更强?

目录 1. 架构&#xff1a;内置 vs 依赖外部 TDengine: InfluxDB: 2. 灵活性&#xff1a;动态订阅 vs 静态订阅 TDengine: InfluxDB: 3. 消费机制、API 兼容性与易用性对比 4. 结语 在时序数据应用场景中&#xff0c;数据实时消费和处理能力成为衡量数据库性能和可用性的…...

OpenCV实现多尺度细节提升算法

1、算法原理 多尺度细节提升算法来源于论文*《DARK IMAGE ENHANCEMENT BASED ON PAIRWISE TARGET CONTRAST AND MULTI-SCALE DETAIL BOOSTING》*&#xff0c;算法主要是解决细节增强算法中噪声和细节的平衡问题。 常规的非锐化掩蔽&#xff08;USM&#xff09;算法在提升细节…...

按键精灵ios越狱脚本教程:多选框联动的ui界面

以下是一个简单的 iOS 代码示例&#xff0c;使用 Swift 语言来创建一个包含多选框&#xff08;复选框&#xff09;的 UI 界面&#xff0c;并实现联动效果。 import UIKitclass ViewController: UIViewController {let checkbox1 UIButton(type:.system)let checkbox2 UIButt…...

YOLOv10-1.1部分代码阅读笔记-patches.py

patches.py ultralytics\utils\patches.py 目录 patches.py 1.所需的库和模块 2.def imread(filename: str, flags: int cv2.IMREAD_COLOR): 3.def imwrite(filename: str, img: np.ndarray, paramsNone): 4.def imshow(winname: str, mat: np.ndarray): 5.def tor…...

撤回最近的 git commit

在 Git 中&#xff0c;如果你想撤回最近的 git commit&#xff0c;可以根据不同的需求选择不同的操作。以下是几种常见的撤回方式&#xff1a; 1. 撤回最后一次 commit&#xff0c;但保留修改&#xff08;soft reset&#xff09; 如果你想撤销 git commit&#xff0c;但保留修…...

基于DFT与IIR-FIR滤波器的音频分析与噪声处理

基于DFT与IIR-FIR滤波器的音频分析与噪声处理 【完整源码文档报告】 【需要可随时联系博主&#xff0c;常在线能秒回!】 系统功能与实现介绍 功能与实现 音频处理系统界面搭建&#xff1a;利用MATLAB的GUI工具&#xff0c;构建了音频分析界面&#xff0c;包括文件导入、录…...

MySQL主从部署(保姆版)

一、mysql 同步复制有关概述 一般数据库都是读取压力大于写数据压力&#xff0c;主从复制即为了实现数据库的负载均衡和读写分离。通过将Mysql的某一台主机的数据复制到其它主机&#xff08;slaves&#xff09;上&#xff0c;主服务器只负责写&#xff0c;而从服务器只负责读。…...

Golang笔记——协程同步

大家好&#xff0c;这里是Good Note&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Golang的协程同步的实现和应用场景。 文章目录 协程同步是什么&#xff1f;为什么需要协程同步&#xff1f;常见的协程同步机制互斥锁&#xff0…...

1.14学习

misc buuctf-大白 由提示可以知道这个应该是修改图片的宽高了&#xff0c;下载附件后得到了图片用随波逐流直接修改图片的宽高输出即可 buuctf-乌镇峰会种图 点击下载&#xff0c;出现了一个网页为图片将图片另存为&#xff0c;用随波逐流得到的信息解不了&#xff0c;再试…...

2025 年 JavaScript 入门教程

2025 年 JavaScript 入门教程 在当今数字化时代&#xff0c;JavaScript 作为一门广泛应用于 Web 开发的编程语言&#xff0c;其重要性不言而喻。无论是前端页面的交互实现&#xff0c;还是后端服务器的逻辑处理&#xff0c;JavaScript 都发挥着关键作用。本教程旨在帮助初学者…...

paddle——站在巨人肩膀上及背刺二三事

飞桨AI Studio - 人工智能学习与实训社区 飞桨PaddlePaddle-源于产业实践的开源深度学习平台 先抛结论&#xff0c;对于想要快速了解某一领域有哪些比较适合落地的算法的从业人员来说&#xff0c;是一个很好的参考系统。从中可以知道从哪些模型里选型、如何轻量化、如何加…...

nvim , neovim , Lua 语法, text object

说明 &#xff1a; 了解一下 nvim 中的基本的 文本的类型。 基本类型有几种&#xff0c; 1 word , sentence , paragragh 2 (), {}, ,"", 3 就是 html 中的 tag 标签。 然后就是选中的类型。 1 i : 待变 inner 2 a: 代表around &#xff0c; 基本的动作有 &…...

6.2 MySQL时间和日期函数

以前我们就用过now()函数来获得系统时间&#xff0c;用datediff()函数来计算日期相差的天数。我们在计算工龄的时候&#xff0c;让两个日期相减。那么其中的这个now函数返回的就是当前的系统日期和时间。 1. 获取系统时间函数 now()函数&#xff0c;返回的这个日期和时间的格…...

批量识别图片型PDF指定区域内容识别保存表格+PDF批量改名:技术难题与项目实战总结

相关项目实战&#xff1a; 一、引言 在当今数字化办公环境中&#xff0c;批量处理PDF文件中的表格数据并进行改名是一项常见但具有挑战性的任务。无论是从大量的财务报销凭证、学术研究报告还是项目文档中提取表格信息&#xff0c;都可能遇到各种各样的技术难题。 二、批量提…...

【MySQL】索引(一)

索引 一、磁盘1、物理结构2、示意图3、定位扇区4、读写操作的基本方式 二、页1、介绍2、示例3、作用与结构4、类型&#xff08;1&#xff09;数据页&#xff08;2&#xff09;其他 5、组织与管理6、性能优化7、示意图&#xff08;B树&#xff09; 三、索引1、作用2、注意事项 四…...

缩放 对内外参的影响

当你对图像进行同比例缩小时&#xff0c;图像的内参需要相应地变化&#xff0c;但外参通常保持不变。 相机内参 相机内参&#xff08;内参矩阵&#xff09;描述了相机的固有属性&#xff0c;包括焦距和主点&#xff08;光轴与图像平面的交点&#xff09;的坐标。 当你对图像…...

excel设置好的可选择列数据后,如何快速输入到单元格中?

当设置好列的【数据】-【数据有效性】-【序列】后&#xff0c;在单元格中输入可选择数据的开头&#xff0c;就会提示出对应的可选择数据&#xff0c;然后&#xff0c;按一下键盘上的【↓】键&#xff0c;再按回车&#xff0c;即可快速输入到单元格中。...

设计一个流程来生成测试模型安全性的问题以及验证模型是否安全

要使用 Ollama 运行 llama3.3:70b 模型&#xff0c;并设计一个流程来生成测试模型安全性的问题以及验证模型是否安全&#xff0c;可以按照以下步骤进行设计和实现。整个过程包括环境配置、设计安全测试提示词、执行测试以及分析结果。以下是详细的步骤和指导&#xff1a; 1. 环…...

vue3学习日记5 - 项目起步

最近发现职场前端用的框架大多为vue&#xff0c;所以最近也跟着黑马程序员vue3的课程进行学习&#xff0c;以下是我的学习记录 视频网址&#xff1a; Day2-11.项目起步-静态资源引入和ErrorLen安装_哔哩哔哩_bilibili 学习日记&#xff1a; vue3学习日记1 - 环境搭建-CSDN博…...

ESP32,uart安装驱动uart_driver_install函数剖析,以及intr_alloc_flags 参数的意义

在 uart_driver_install 函数中&#xff0c;参数 RX_BUF_SIZE * 2 指定了接收缓冲区&#xff08;RX buffer&#xff09;的大小。这个参数对于 UART 驱动程序来说非常重要&#xff0c;因为它决定了可以存储多少接收到的数据&#xff0c;直到应用程序读取它们为止。下面是对该函数…...

android源码编译后,为什么emulator一直黑屏或者停止android界面

一、前言 最近编译了android12的源码&#xff0c;但是编译完成之后&#xff0c;emulator命令一直卡在android界面上&#xff0c;不会进入系统。经过我多方面的研究&#xff0c;终于找到解决方案。记录下来&#xff0c;希望对遇到这个问题的朋友有所帮助。 二、解决方案 网上…...

ubuntu22.04降级安装CUDA11.3

环境&#xff1a;主机x64的ubuntu22.04&#xff0c;原有CUDA12.1&#xff0c;但是现在需要CUDA11.3&#xff0c;本篇文章介绍步骤。 一、下载CUDA11.3的run文件 下载网址&#xff1a;https://developer.nvidia.com/cuda-11-3-1-download-archive?target_osLinux&target_…...

hive知识体系

hive知识体系 hive知识体系 链接: 1Hive概览 链接: 2Hive表类型 链接: 3Hive数据抽样 链接: 4Hive计算引擎 链接: 5Hive存储与压缩 链接: 6Hive Sql 大全 链接: 6Hive Sql 大全-Hive 函数 链接: 6Hive Sql 大全-窗口函数 链接: 7Hive执行计划 链接: 8Hive SQL底层执行原理 链接…...

【ASP.NET学习】Web Forms创建Web应用

文章目录 什么是 Web Forms&#xff1f;ASP.NET Web Forms - HTML 页面用 ASP.NET 编写的 Hello RUNOOB.COM它是如何工作的&#xff1f;经典 ASP ASP.NET Web Forms - 服务器控件经典 ASP 的局限性ASP.NET - 服务器控件ASP.NET - HTML 服务器控件ASP.NET - Web 服务器控件ASP.N…...

【Qt】QThread总结

目录 成员函数创建方式方式一方式二方式三注意 example总结参考文章 成员函数 创建方式 方式一 QThread 静态成员create auto thd QThread::create([]{});方式二 继承QThread类&#xff0c;重写run run函数它作为线程的入口&#xff0c;也就是线程从run()开始执行&#…...

常见的安全测试漏洞详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、SQL注入攻击 SQL 注入攻击主要是由于程序员在开发过程中没有对客户端所传输到服务器端的参数进行严格的安全检查&#xff0c;同时 SQL 语句的执行引用了该参…...

代理模式和适配器模式有什么区别

代理模式&#xff08;Proxy Pattern&#xff09;和适配器模式&#xff08;Adapter Pattern&#xff09;都是结构型设计模式&#xff0c;它们有不同的应用场景和目标&#xff0c;虽然在某些方面看起来相似&#xff0c;但它们的意图和实现方式有显著的区别。 1. 代理模式&#x…...

机器学习头歌(第三部分-强化学习)

一、强化学习及其关键元素 二、强化学习的分类 三、任务与奖赏 import numpy as np# 迷宫定义 maze np.array([[0, 0, 0, 0, 0],[0, -1, -1, 0, 0],[0, 0, 0, -1, 0],[-1, -1, 0, -1, 0],[0, 0, 0, -1, 1] ])# 定义强化学习的参数 gamma 0.8 # 折扣因子 alpha 0.5 # 学习率…...

【Hive】新增字段(column)后,旧分区无法更新数据问题

TOC 【一】问题描述 Hive修改数据表结构的需求&#xff0c;比如&#xff1a;增加一个新字段。 如果使用如下语句新增列&#xff0c;可以成功添加列col1。但如果数据表tb已经有旧的分区&#xff08;例如&#xff1a;dt20190101&#xff09;&#xff0c;则该旧分区中的col1将为…...

智能化的城市管理解决方案,智慧城管执法系统源码,微服务架构、Java编程语言、Spring Boot框架、Vue.js前端技术

智慧城管执法系统是一种高度信息化、智能化的城市管理解决方案&#xff0c;它利用现代信息技术&#xff0c;如微服务架构、Java编程语言、Spring Boot框架、Vue.js前端技术、Element UI组件库、UniApp跨平台开发工具以及MySQL数据库等&#xff0c;构建了一个综合性的执法管理平…...

【区间DP】【hard】力扣1312. 让字符串成为回文串的最少插入次数

加粗样式给你一个字符串 s &#xff0c;每一次操作你都可以在字符串的任意位置插入任意字符。 请你返回让 s 成为回文串的 最少操作次数 。 「回文串」是正读和反读都相同的字符串。 示例 1&#xff1a; 输入&#xff1a;s “zzazz” 输出&#xff1a;0 解释&#xff1a;字…...

android刷机

android ota和img包下载地址&#xff1a; https://developers.google.com/android/images?hlzh-cn android启动过程 线刷 格式&#xff1a;ota格式 模式&#xff1a;recovery 优点&#xff1a;方便、简单&#xff0c;刷机方法通用&#xff0c;不会破坏手机底层数据&#xff0…...

web-前端小实验8

实现以上图片中的内容 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…...

C++实现设计模式---单例模式 (Singleton)

单例模式 (Singleton) 概念 单例模式 确保一个类在整个程序生命周期中只有一个实例&#xff0c;并提供一个全局访问点。 它是一种创建型设计模式&#xff0c;广泛用于需要共享资源的场景。 使用场景 配置管理器&#xff1a;程序中需要一个全局的配置对象。日志系统&#xff…...

【大数据】机器学习-----线性模型

一、线性模型基本形式 线性模型旨在通过线性组合输入特征来预测输出。其一般形式为&#xff1a; 其中&#xff1a; x ( x 1 , x 2 , ⋯ , x d ) \mathbf{x}(x_1,x_2,\cdots,x_d) x(x1​,x2​,⋯,xd​) 是输入特征向量&#xff0c;包含 d d d 个特征。 w ( w 1 , w 2 , ⋯ ,…...

C#类型转换

C#是静态类型的语言&#xff0c;变量一旦声明就无法重新声明或者存储其他类型的数据&#xff0c;除非进行类型转换。本章的主要任务就是学习类型转换的知识。类型转换有显式的&#xff0c;也有隐式的。所谓显式&#xff0c;就是我们必须明确地告知编译器&#xff0c;我们要把变…...

OpenCV相机标定与3D重建(55)通用解决 PnP 问题函数solvePnPGeneric()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据3D-2D点对应关系找到物体的姿态。 cv::solvePnPGeneric 是 OpenCV 中一个更为通用的函数&#xff0c;用于解决 PnP 问题。它能够返回多个可能…...