2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是
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 {}
执行结果如下:

2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是的更多相关文章
- 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...
- 给定任意字符串,计算一共能组合成多少个单词bing
CSDN编程挑战里的题目 例如有一个字符串"iinbinbing",截取不同位置的字符‘b’.‘i’.‘n’.‘g’组合成单词"bing".若从1开始计数的话, ...
- 代码实现从键盘接收一个字符串, 程序对其中所有字符进行排序,例如键盘输入: helloitcast程序打印:acehillostt
package com.loaderman.test; import java.util.Comparator; import java.util.Scanner; import java.util. ...
- [Jobdu] 题目1283:第一个只出现一次的字符
题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字 ...
- 剑指Offer - 九度1283 - 第一个只出现一次的字符
剑指Offer - 九度1283 - 第一个只出现一次的字符2013-11-21 21:13 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出 ...
- 九度OJ 1283:第一个只出现一次的字符 (计数)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1808 解决:997 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符 ...
- 【剑指Offer面试编程题】题目1283:第一个只出现一次的字符--九度OJ
题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据 每一组输入一个字符串. 输出: 输出第一个只出现一次的 ...
- 剑指OFFER之第一个只出现一次的字符(九度OJ1283)
题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字 ...
- 九度OJ 1283 第一个只出现一次的字符
题目地址:http://ac.jobdu.com/problem.php?pid=1283 题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现 ...
- 九度oj 题目1283:第一个只出现一次的字符
题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据 每一组输入一个字符串. 输出: 输出第一个只出现一次的 ...
随机推荐
- 如何优化if--else
1.现状代码 public interface IPay { void pay(); } package com.test.zyj.note.service.impl; import com.test ...
- tornado cgi wsgi uwsgi之间的关系
Tornado可以当作HTTP server,直接TCP开始实现HTTP服务,这也就是为啥说Tornado可以不经过WSGI.实际上它也不是CGI. CGI是指通过stdin和stdout进行HTTP ...
- django+easyui
django+easyui 快速构建网站 演示地址:http://demo.topjui.com/?from=360tg
- windows用户名是中文引起的路径问题
修改成英文即可
- Redis内存淘汰策略
目录 一.内存淘汰策略重要性 二.Key值过期策略 三.内存淘汰策略 三.Redis内存淘汰策略配置 一.内存淘汰策略重要性 我们都知道redis的性能很高,最主要的原因之一就是redis的数据都在内 ...
- ansible用authorized_key模块批量推送密钥到受控主机实现免密登录
一,ansible的authorized_key模块的用途 用来配置密钥实现免密登录: ansible所在的主控机生成密钥后,如何把公钥上传到受控端? 当然可以用ssh-copy-id命令逐台手动处理 ...
- MySQL学习(七)varchar和char区别
varchar:用于存储可变长字符串,是最常见的字符串数据类型.比定长类型更节省空间,因为它仅使用必要的空间.varchar需要使用1或2个额外字节记录字符串的长度:如果列的最大长度小于或等于255字 ...
- Android 音视频采集那些事
音视频采集 在整个音视频处理的过程中,位于发送端的音视频采集工作无疑是整个音视频链路的开始.在 Android 或者 IOS 上都有相关的硬件设备--Camera 和麦克风作为输入源.本章我们来分析如 ...
- 基于springboot实现SSM整合
(1)SpringBoot整合Spring(不存在) (2)SpringBoot整合SpringMVC(不存在) (3)SpringBoot整合MyBatis(主要) 一.新建springboot项目 ...
- Spring事务的底层原理
1. 划分处理单元--IOC 由于spring解决的问题是对单个数据库进行局部事务处理的,具体的实现首相用spring 中的IOC划分了事务处理单元.并且将对事务的各种配置放到了ioc容器中(设置事务 ...