首页 > 其他分享 >字符串变换最小字符串

字符串变换最小字符串

时间:2022-09-19 17:12:52浏览次数:80  
标签:字符 变换 chars 最小 start 字符串

题目

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

输入描述:
一串小写字母组成的字符串s

输出描述:
按照要求进行变换得到的最小字符串

示例

输入:abcdef 
输出:abcdef 
说明:abcdef已经是最小字符串,不需要交换 

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

备注:
s是都是小写字符组成
1<=s.length<=1000

思路

贪心策略

  • 根本不需要每个都穷举出来进行比对
  • 对于一个字符串,只需要把字符串中最小字符调换位置到第一位就是最小字符串
  • 如果第一个字符已经是最小字符,则对除去第一个字符的字串进行操作
    所以我就直接用递归进行操作

注意

如果最小字符有多个,记得取最后一个最小字符,不然会有很多用例通不过

代码


import java.util.Scanner;


public class Main1 {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        String inputString = in.next();
		
        char[] chars = inputString.toCharArray();

        moveTheSmallest2Head(chars, 0);

        System.out.println(new String(chars));
    }

    private static void moveTheSmallest2Head(char[] chars, int start) {

        if (start == chars.length - 1) {
            return;
        }

        boolean headIsSmallest = true;


        char smallest = chars[start];
        int samallestIndex = start;

        for (int i = start + 1; i < chars.length; i++) {
            if (chars[i] < chars[start] && chars[i] <= smallest) {
                headIsSmallest = false;
                smallest = chars[i];
                samallestIndex = i;
            }
        }

        if (headIsSmallest) {
            moveTheSmallest2Head(chars, start + 1);
        } else {
            char temp = chars[start];
            chars[start] = chars[samallestIndex];
            chars[samallestIndex] = temp;
        }
    }
}

标签:字符,变换,chars,最小,start,字符串
From: https://www.cnblogs.com/cgengwei/p/16708304.html

相关文章

  • PHP 字符串中 {} 的使用
    1.为什么使用{}当字符串中存在$时,PHP引擎将尽可能多的查找字符串作为变量名为了防止变量名称和字符串中的其他内容混为一体,可以使用{}将变量名称作为一个整体使......
  • Javascript 字符串
    JavaScript字符串您能够使用单引号或双引号字符串长度内建属性length可返回字符串的长度:vartxt="ABCDEFGHIJKLMNOPQRSTUVWXYZ";varsln=txt.length;特殊......
  • 正则匹配替换字符串
    记录一下,正则匹配字符串例:leta='asdf1234<ahref="http://www.baidu.com">百度</a>qwer5678<aclass="123"href="http://www.google.com">google</a>'现在要给所......
  • 字符串中判断是否包含某个字符
    一、方法一:newRegExp1、概述:RegExp是正则表达式的缩写;当检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp就是这种模式2.RegExp对象的方法1)RegExp对......
  • Leetcode第8题:字符串转换整数 (atoi)
    /**这题就是要细心,首先要通过循环去掉前面的空格然后看看有没有正号或者负号,或者没有符号再看看数字有没有越界*/classSolution{publicintmyAtoi(Strings)......
  • 霍夫变换原理及实现(Opencv C++)
    已知一幅图像中的n个点,假设我们希望找到这些点中位于直线上的子集。一种可能的解决方法是,首先找到由每对点确定的所有直线,然后寻找靠近特定直线的那些点的所有子集。这种方......
  • 高亮显示最大和最小值
     问题:高亮显示最大值(红色)和最小值(绿色)条件格式解决。选取B1:B12》开始》条件格式》项目选取规则前10项》1》确定最后10项》1》绿填充色深绿色文本》确定 ......
  • leetcode1047-删除字符串中的所有相邻重复项
    1047.删除字符串中的所有相邻重复项 方法一:stack 这种做法是纯纯的小丑做法,因为string类型本身就可以实现栈。这样的做法结束之后还要出栈倒序放到字符串里,时间开销......
  • leetcode 2414. 最长的字母序连续子字符串的长度
    leetcode2414.最长的字母序连续子字符串的长度题目描述字母序连续字符串是由字母表中连续字母组成的字符串。换句话说,字符串"abcdefghijklmnopqrstuvwxyz"的任意子......
  • C++ Unicode字符串
    字符串前面加L表示该字符串是Unicode字符串。_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,VisualC++里边定义字符......