贪心算法 —— 字典序删除字符

题目描述

给定一个单词,请问在单词删除t个字母之后,能得到的字典序最小的单词是什么?

输入描述

输入的第一行包含一个单词,有大写英文字母组成

第二行包含一个正整数t

其中,单词长度不超过100,t小于单词长度

输出描述

输出一个单词,表示答案

输入输出样例

复制代码
LANQIAO
3

输出

复制代码
AIAO

题解

本题是一道经典的贪心算法的问题。我们要做的就是找到局部最优解,从而获得全局最优解。

首先,什么是字典序最小的排列呢?显然就是在顺序不变的情况下,将小的字符往前排。最终得到的排列一定会是从小到大的阶梯状排序。因此,我们要做的就是每次都从头遍历字符串,将那些升序排列中的"不和谐因素"逐一删除。当然,因为是从头遍历,因此字典序将会是最小。

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String word = scan.next();
        int t = scan.nextInt();

        StringBuilder result = new StringBuilder(word);

        for (int i = 0; i < t; i++) {
            int j = 0;
            while (j < result.length() - 1 && result.charAt(j) <= result.charAt(j + 1)) {
                j++;
            }
            result.delete(j, j + 1);
        }

        System.out.println(result.toString());
        scan.close();
    }
}
相关推荐
S01d13r3 小时前
LeetCode 解题思路 48(编辑距离、只出现一次的数字)
算法·leetcode·职场和发展
C_Liu_3 小时前
C语言:深入理解指针(5)
java·c语言·算法
small_wh1te_coder3 小时前
从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
c语言·数据结构·c++·stm32·算法·leetcode·深度优先
枫景Maple3 小时前
LeetCode 45. 跳跃游戏 II(中等)
算法·leetcode
এ᭄画画的北北3 小时前
力扣-236.二叉树的最近公共祖先
算法·leetcode
alden_ygq5 小时前
K8S cgroups详解
容器·贪心算法·kubernetes
z人间防沉迷k5 小时前
堆(Heap)
开发语言·数据结构·笔记·python·算法
hy.z_7775 小时前
【数据结构】链表 LinkedList
java·数据结构·链表
不二狗5 小时前
每日算法 -【Swift 算法】Two Sum 问题:从暴力解法到最优解法的演进
开发语言·算法·swift
LabVIEW开发5 小时前
LabVIEW中样条插值实现及应用
算法·labview知识