2022-11-26:给定一个字符串s,只含有0~9这些字符
你可以使用来自s中的数字,目的是拼出一个最大的回文数
使用数字的个数,不能超过s里含有的个数
比如 :
39878,能拼出的最大回文数是 : 898
00900,能拼出的最大回文数是 : 9
54321,能拼出的最大回文数是 : 5
最终的结果以字符串形式返回。
str的长度为N,1 <= N <= 100000。
来自微软。

答案2022-11-26:

力扣2384。统计词频,先从大网校填写一对一对的数据,然后填写剩下的最大的数据,最后组合就是需要的返回值。注意取一对数的时候刚开始不能取0,因为起始为0的数不是回文数。

代码用rust编写。代码如下:

use std::{cmp::Ordering, collections::HashMap};

impl Solution {
pub fn largest_palindromic(s: String) -> String {
if s == "" {
return String::from("");
}
let mut map: HashMap<i32, i32> = HashMap::new();
let n = s.len() as i32;
let sc: Vec<char> = s.chars().collect();
for i in 0..n {
let number = sc[i as usize] as i32 - '0' as i32;
map.insert(
number,
if map.contains_key(&number) {
map.get(&number).unwrap() + 1
} else {
1
},
);
}
let mut heap: Vec<Record> = vec![];
for (k, v) in map.iter() {
heap.push(Record::new(*k, *v));
}
heap.sort_by(compare);
let mut top = heap.remove(0);
if top.times == 1 {
return format!("{}", top.number);
} else if top.number == 0 {
heap.sort_by(compare);
return format!("{}", if heap.len() == 0 { 0 } else { heap[0].number });
} else {
let mut left = String::new();
left.push_str(&format!("{}", top.number));
top.times -= 2;
if top.times > 0 {
heap.push(top);
}
heap.sort_by(compare);
while heap.len() > 0 && heap[0].times > 1 {
top = heap.remove(0);
left.push_str(&format!("{}", top.number));
top.times -= 2;
if top.times > 0 {
heap.push(top);
}
heap.sort_by(compare);
}
let mut ans = String::new();
ans.push_str(&left);
if heap.len() > 0 {
heap.sort_by(compare);
ans.push_str(&format!("{}", heap[0].number));
}
let lc: Vec<char> = left.chars().collect();
let mut i = left.len() as i32 - 1;
while i >= 0 {
ans.push(lc[i as usize]);
i -= 1;
}
return ans;
}
}
} fn compare(o1: &Record, o2: &Record) -> Ordering {
let l1 = Ordering::Greater;
let l2 = Ordering::Less; if o1.times == 1 && o2.times > 1 {
return l1;
}
if o1.times > 1 && o2.times == 1 {
return l2;
}
if o2.number - o1.number > 0 {
return l1;
} else if o2.number - o1.number < 0 {
return l2;
} else {
return Ordering::Equal;
}
} struct Record {
number: i32,
times: i32,
} impl Record {
fn new(n: i32, t: i32) -> Self {
Self {
number: n,
times: t,
}
}
} fn main() {
let ans = Solution::largest_palindromic(String::from("444947137"));
println!("ans = {:?}", ans);
} struct Solution {}

执行结果如下:


左神java代码

2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是的更多相关文章

  1. 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数

    import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...

  2. 给定任意字符串,计算一共能组合成多少个单词bing

    CSDN编程挑战里的题目 例如有一个字符串"iinbinbing",截取不同位置的字符‘b’.‘i’.‘n’.‘g’组合成单词"bing".若从1开始计数的话, ...

  3. 代码实现从键盘接收一个字符串, 程序对其中所有字符进行排序,例如键盘输入: helloitcast程序打印:acehillostt

    package com.loaderman.test; import java.util.Comparator; import java.util.Scanner; import java.util. ...

  4. [Jobdu] 题目1283:第一个只出现一次的字符

    题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字 ...

  5. 剑指Offer - 九度1283 - 第一个只出现一次的字符

    剑指Offer - 九度1283 - 第一个只出现一次的字符2013-11-21 21:13 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出 ...

  6. 九度OJ 1283:第一个只出现一次的字符 (计数)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1808 解决:997 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符 ...

  7. 【剑指Offer面试编程题】题目1283:第一个只出现一次的字符--九度OJ

    题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据 每一组输入一个字符串. 输出: 输出第一个只出现一次的 ...

  8. 剑指OFFER之第一个只出现一次的字符(九度OJ1283)

    题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字 ...

  9. 九度OJ 1283 第一个只出现一次的字符

    题目地址:http://ac.jobdu.com/problem.php?pid=1283 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现 ...

  10. 九度oj 题目1283:第一个只出现一次的字符

    题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据 每一组输入一个字符串. 输出: 输出第一个只出现一次的 ...

随机推荐

  1. WordPress标题分隔符”-“被转义为“&#8211”怎么办?

    按照百度搜索资源平台<百度搜索网页标题规范:让标题回归标题本身>百度官方文档参考,如果WordPress标题里出现不规范"– 2.停止wptexturize转义任何字符 add_ ...

  2. LeetCode224 基本计算器

    idea:刚开始是打算分类讨论,建立了数字栈和字符栈,按照传入字符当时两个栈的基本情况分类,结果讨论完之后分类太麻烦,导致分析完了之后漏洞不少.我觉得这道题难点在于括号和负号的处理,一开始将导致计算机 ...

  3. warning: the `gets' function is dangerous and should not be used.

    LINUX下编译C程序时,出现了:warning: the `gets' function is dangerous and should not be used. 原因:Linux 下gcc编译器不 ...

  4. Springboot jar 打包脚本和启动脚本

    说明: SpringBoot极大的提高了工作效率,集成了各大厂优秀的组件,好处就不多说了,使用配置也非常方便,本文主要讲解如何使用更方便的方式打包发布,利用SpringBoot的新特性内置tomcat ...

  5. 模拟多路开关mux的数据耦合问题

    1.前言 最近在做有关sensor的项目时遇到了一个关于多路选择器引起的数据耦合问题,具体的问题现象和解决方案如下: 2.多路开关的介绍 2.1 概述 多路开关:在多路被测试的信号公用一路A/D转换器 ...

  6. rsync+inotify组合实现实时同步

    首先准备两台服务器(centos7) A:192.168.75.160 B:192.168.75.161 A机器当做客户端,B机器当做服务端 rsync 安装 客户端服务器端都要安装rsync ,但是 ...

  7. 统一观测丨使用 Prometheus 监控 E-MapReduce,我们该关注哪些指标?

    作者:闻洪 开源大数据平台E-MapReduce(简称"EMR")是云原生开源大数据平台,向客户提供简单易集成的Hadoop.Hive.Spark.Flink.Presto.Cli ...

  8. 基于Pierre Dellacherie的俄罗斯方块-05Pierre Dellacherie算法

    基于Pierre Dellacherie的俄罗斯方块-05Pierre Dellacherie算法 Pierre Dellacherie算法感觉上像是一个遍历算法,给与各个参数不同的权重,使得更加合理 ...

  9. MasaFramework入门第二篇,安装MasaFramework了解各个模板

    安装MasaFramework模板 执行以下命令安装最新Masa的模板 dotnet new --install Masa.Template 安装完成将出现四个模板 Masa Blazor App: ...

  10. Linux & 标准C语言学习 <DAY3>

    C语言简介:     BCPL->New B->C->UNIX->Minix->Linux->gcc     C语言诞生于1971~1973年,美国贝尔实验室,肯. ...