首页 > 其他分享 >华为OD E卷(100分)30-字符串变换最小字符串

华为OD E卷(100分)30-字符串变换最小字符串

时间:2024-12-19 16:04:07浏览次数:6  
标签:OD String 变换 30 最小 cs str 字符串

前言

        工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

        给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。变换规则:交换字符串中任意两个不同位置的字符。

输入

        一串小写字母组成的字符串s
 备注

  •  s是都是小写字符组成
  • 1<=s.length<=1000

输出

        一串小写字母组成的字符串s

示例 

示例1

输入
abcdef
输出
abcdef

说明
abcdef已经是最小字符串,不需要交换。

示例2

输入
bcdefa
输出
acdefb
说明
a和b进行位置交换,可以得到最小字符串。

解题思路

        因为要找最小字符串,所有后面替换的字符串越靠后越小。

题解

Java实现

package huawei.e100;

import java.util.Arrays;
import java.util.Scanner;

/**
* @author arnold
* @date 2024年12月19日
* 字符串变换最小字符串
*/
public class T30 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			String str = sc.nextLine();
			String s = run(str);
			System.out.println(s);
		}
		
	}
	
	static String run(String str) {
		// 判断是否是最小字符串
		char[] cs = str.toCharArray();
		Arrays.sort(cs);
		if (new String(cs).equals(str)) {
			return str;
		}
		// 查找最优的字符和位置
		char minchar = Character.MAX_VALUE;
		int changeIndexStart = cs.length-1;
		int changeIndexEnd = 0;
		for (int i = 0; i < cs.length-1 && i <= changeIndexStart; i++) {
			for (int j = i+1; j < cs.length; j++) {
				if(str.charAt(j) < str.charAt(i) && str.charAt(j) <= minchar) {
					minchar = str.charAt(j);
					changeIndexStart = i;
					changeIndexEnd = j;
				}
			}
		}
		// 交换位置
		cs = str.toCharArray();
		cs[changeIndexEnd] = cs[changeIndexStart];
		cs[changeIndexStart] = minchar;
		return new String(cs);
	}

}

标签:OD,String,变换,30,最小,cs,str,字符串
From: https://blog.csdn.net/arnold66/article/details/144587883

相关文章

  • 【NLP 16、实践 ③ 找出特定字符在字符串中的位置】
    看着父亲苍老的白发和渐渐老态的面容希望时间再慢一些                                                ——24.12.19一、定义模型1.初始化模型①初始化父类super(TorchModel,self).__init__(): 调用父类nn.Mod......
  • 配置 MongoDB 为副本集
    1.配置MongoDB为副本集首先,你需要在mongod.cfg配置文件中启用副本集并指定副本集名称。假设副本集名称为rs0。打开你的MongoDB配置文件(mongod.cfg,Windows上通常位于C:\ProgramFiles\MongoDB\Server\<version>\mongod.cfg,Linux上通常是/etc/mongod.conf),并添加以下内......
  • R语言的字符串操作
    【图书推荐】《R语言医学数据分析实践》-CSDN博客《R语言医学数据分析实践李丹宋立桓蔡伟祺清华大学出版社9787302673484》【摘要书评试读】-京东图书(jd.com)R语言医学数据分析实践-R语言的数据结构-CSDN博客在R语言中,字符串是一种表示文本数据的数据类型。字符串......
  • 你的语言模型实际是一个奖励模型!Direct Preference Optimization:Your Language Model
    直接偏好优化:你的语言模型实际上是一个奖励模型......
  • SpringCodel微服务
    SpringCodel微服务docker启动命令:systemctlstartdocker启动dockersystemctlstatusdocker查看docker状态systemctlenabledocker设置开机自启设置容器开机自启dockerupdatestatus=aways容器名dockerps格式化输出容器内容(1)--format "docker......
  • JackJson的@JsonAutoDetect注解
    1、@JsonAutoDetect(作用在类上):自动检测fieldVisibility:字段的可见级别;getterVisibility:getter方法的可见级别;setterVisibility:setter方法的可见级别。ANY:任何级别的字段都可以自动识别NONE:任何字段都不可以自动识别NON_PRIVATE:非private修饰的字段可以自动识别PROTECTED_OR......
  • 大数据 | 数据采集与输入核心技术与应用深度解析,Flume/ NiFi/ Kafka/ Sqoop/ Denodo区
    大数据处理的第一步是数据的采集与输入。无论是用于批量处理还是实时分析,数据的采集过程都是整个大数据生命周期的基础。数据采集不仅需要高效、实时地从不同来源获取数据,还需要能够处理各种形式的数据,确保其质量和一致性。采集的数据通常来自多个源头,例如传感器数据、系统日志......
  • Dodcker如何导入镜像tar
    Dodcker如何导入镜像tar我们可以将docker镜像导出为压缩文件,然后再在另一主机上导入。要在Docker中导入一个.tar格式的镜像文件,您可以使用dockerload命令。这个命令会将一个保存的镜像压缩文件(.tar,.tar.gz或.tgz)加载到Docker镜像库中。dockerload-i<image_name>.tar例如......
  • 图解Transformer就这30页PPT,你们真不看啊
    图解Transformer就这30页PPT,你们真不看啊主要介绍了Seq2Seq模型,慢慢引出了transformer的整体模型架构,比较具体的介绍了编码器部分的数据处理过程,包括了位置编码、多头注意力机制、残差连接、LayerNorm以及前馈网络等基本结构。目录:1、Seq2Seq模型2、Transformer模型......
  • MacOS+vscode调试mysql8.0源码
    环境:MacOsM1vscode前置:安装brew##安装brew/usr/bin/ruby-e"$(curl-fsSLhttps://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"##环境变量eval"$(/opt/homebrew/bin/brewshellenv)"下载源码带boost版本下载之后解压vscode插件安装##直接搜索,然后安......