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,全部由大写字母组成)中找到第一个只出现一次的字符. 输入: 输入有多组数据 每一组输入一个字符串. 输出: 输出第一个只出现一次的 ...
随机推荐
- Azure DevOps - 团队成员有权限却无法看到 Azure Repo
我们需要进入Organization Settings, 在Users中找到相关的用户,确认用户Access Level是否为stakeholder. 点击最右侧三个点,Change Acce ...
- python pandas库总结-数据分析和操作工具
参考:https://pandas.pydata.org/ Input/output相关函数 pandas.read_excel-将Excel文件读入pandas数据框 支持读取xls, xlsx, ...
- Javaweb学习笔记第九弹
MyBatis案例--环境准备 1.依据之前在Navicat建立数据表的方法,新建立一个数据表 2.将数据表的相关内容表现在Java文件的实例上:即成员变量和set.get成员方法 3.new一个测试 ...
- MySQL学习(九)frm与ibd了解
参考:https://cloud.tencent.com/developer/article/1533746 InnoDB: frm,ibd MyISAM: frm,myd,myi ibd是InnoD ...
- HashMap正确遍历方式,千万不要再forforfor啦!!!
for (int i = 0; i < map.size(); i++) { if (map.get(i)/n>=0.01) { num++; } } 上述代码报空指针异常.为什么? 循环 ...
- js函数防抖节流
// 3.1 函数防抖: // 当持续触发事件时,一定时间段内没有再次触发事件,事件处理函数才会执行一次,如果设定时间到来之前,又触发了事件,就重新开始延时.// 也就是说当一个用户一直触发这个函数, ...
- void关键字
在C++中,void表示为无类型,主要有三个用途: (1)函数的 返回值用void,表示函数没有返回值. void func(int a, int b) { //函数体代码 return; } (2) ...
- 实现一个CRDT工具库——LWWReg
LWWReg LWW Register是一种数据结构,用于存储一个值和一个时间戳,支持读取和写入操作.在写入时,如果新的时间戳比原来的时间戳更大,那么就更新值和时间戳:在读取时,直接返回当前的值.这个 ...
- 一次对pool的误用导致的.net频繁gc的诊断分析
(最近有读者朋友表示,希望能加一些示意图来描述分析过程中用到的原理知识.好的,之后我会注意,谢谢这位读者) 背景 有位朋友找我,希望我能帮看一下他的一个service.从他的描述看,并没有资源方面的泄 ...
- Node.js中理解asyncmap函数 ,爬取王者荣耀荣耀官网壁纸400多张
async/mapLimit函数理解 const phantom = require('phantom') const express = require('express'); const app ...