Rust : codewars的up AND down 算法
codewars中的“up AND down 算法”如下:
1、对于一个字符串s,用空格隔开,并形成一个Vec类型的 vs;
2、对形成的s,要求进行重新顺序排列,满足这个要求:
length vs(0) <=v length vs(1) >= length vs(2) <= length vs(3) >= length (vs4) <= length (vs5)….;
3、如果输入的字符串为空,则输出“”字符串;
一、我的算法
fn arrange(s: &str) -> String {// your codeprintln!("input:{}",s);if s.len()==0{return "".to_string();}let mut words = s.split_whitespace().collect::<Vec<&str>>();let lens = words.clone().into_iter().map(|x| x.len()).collect::<Vec<_>>();let len = lens.len();if len == 1 {return (&words[0]).to_string();}for i in 0..len - 1 {for j in 0..len - 1 {if i == 0 {if j == 1 && &words[0].len() > &words[1].len() {words = swap(words, 0usize, 1usize);}} else {if j % 2 == 0 {if &words[j].len() > &words[j + 1].len() {words = swap(words, j as usize, (j + 1) as usize);}} else {if &words[j].len() < &words[j + 1].len() {words = swap(words, j as usize, (j + 1) as usize);}}}}}let mut c = 0;let result =words.iter().fold("".to_string(), |total, x| {c += 1;match c % 2 == 0 {true => total + &x.to_uppercase() + " ",_ => total + &x.to_lowercase() + " ",}});(&result).trim().to_string()}fn swap(vec: Vec<&str>, i: usize, j: usize) -> Vec<&str> {let mut v = vec.clone();let len = v.len();if len < i + 1 || len < j + 1 {panic!("swap: i:{},j:{} is not fit!", i, j);}if let Some(v_i) = v.get_mut(i) {*v_i = &vec[j]; //i_val;}if let Some(v_j) = v.get_mut(j) {*v_j = &vec[i];}//println!("before swap vec:{:?}", vec);//println!("after swap vec:{:?}", v);v
}
二、精彩的解法
1、
fn change(mut res : Vec<&str>) -> Vec<&str> {let l = res.len();for i in 0..l - 1 {if (i % 2 != 0 && res[i].len() < res[i + 1].len()) ||(i % 2 == 0 && res[i].len() > res[i + 1].len()) {let tmp = res[i + 1];res[i + 1] = res[i];res[i] = tmp;}}res
}fn arrange(s: &str) -> String {if s == "".to_string() {return "".to_string()}let a: Vec<&str> = s.split(' ').collect::<Vec<&str>>();let e: Vec<&str> = change(a);let l = e.len();let mut res = vec![];for j in 0..l {if j % 2 == 0 {res.push(e[j].to_lowercase())}else {res.push(e[j].to_uppercase())}}res.join(" ").to_string()
}
2、
fn arrange(s: &str) -> String {let mut words: Vec<String> =s.split(' ').map(|w| w.to_string()).collect();for i in 0..words.len() {if i + 1 < words.len() &&((i & 1 == 0 && words[i].len() > words[i+1].len()) ||(i & 1 != 0 && words[i].len() < words[i+1].len())) {words.swap(i, i+1);}if i & 1 == 0 {words[i] = words[i].to_lowercase();} else {words[i] = words[i].to_uppercase();}}words.join(" ")
}
3、
fn arrange(s: &str) -> String {let mut v: Vec<&str> = s.split(char::is_whitespace).collect();for i in 1..v.len() {let do_swap = {if i % 2 == 0 {v[i].len() > v[i-1].len()} else {v[i].len() < v[i-1].len()}};if do_swap {v.swap(i-1, i);}}v.iter().enumerate().map(|(i, item)|if i % 2 == 1 {item.to_uppercase()} else {item.to_lowercase()}).collect::<Vec<_>>().join(" ")
}
Rust : codewars的up AND down 算法相关推荐
- Rust机器学习之tch-rs
Rust机器学习之tch-rs tch-rs是PyTorch接口的Rust绑定,可以认为tch-rs是Rust版的PyTorch.本文将带领大家学习如何用tch-rs搭建深度神经网络识别MNIST数据 ...
- Rust机器学习之Linfa
Rust机器学习之Linfa 本文将带领大家用Linfa实现一个完整的Logistics回归,过程中带大家学习Linfa的基本用法. 本文是"Rust替代Python进行机器学习" ...
- 【5G/4G】128-EEA1与128-NEA1算法详解
文章目录 128-EEA1与128-NEA1算法详解 本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 博客 ...
- Rust机器学习之ndarray
Rust机器学习之ndarray 众所周知,Python之所以能成为机器学习的首选语言,与其丰富易用的库有很大关系.某种程度上可以说是诸如numpy.pandas.scikit-learn.matpl ...
- github开源学习项目推荐
目录 1.洛雪音乐助手桌面版 2.CS 自学指南 3.计算机书籍资源 4.Python - 100天从新手到大师 5.小林 x 图解计算机基础 1.洛雪音乐助手桌面版 洛雪音乐助手桌面版https:/ ...
- [Codewar练习-javac++]Twice linear(双线性)
问题: 段位:4 说明: 假设一个数组 arr,里面的元素是这样的规律: 1.arr[ 0 ] = 1; 2.每一个 arr[ i ] 都存在 2 * arr[ i ] + 1 和 3 * arr[ ...
- 推荐一些非常有用的学习网站
昨天的文章很多人表示很受用,同时有人留言让我推荐一些学习渠道啥的,马上双 11,姑且忙中偷闲送波福利给你们,今天就给你们推荐一些绝对有用的学习网站. 1. free-programming-books ...
- [Codewar练习-jsc++]N Linear(N线性)
问题: 段位:4 说明: 假设一个数组 arr 和 另一个数组 arr2,里面的元素是这样的规律: 1.arr[ 0 ] = 1; 2.每一个 arr[ i ] 都存在 arr2[0] * arr[ ...
- Rust 算法排位记 - 插入排序的图示和代码实现
Rust 代码在编写过程中与其它语言的略有不同,因为它的编译器不允许有任何不安全的写法,遂代码编写过程中花费时间最长的莫过于查找编译报错的原因.这样也有好处--代码写好之后,稳定性高得一笔! 以下是来 ...
- Rust 算法排位记-选择排序图示与代码实现
听说你们在家闷得快要发霉了,来点新鲜的吧.集中注意力,让时间过得更快一些! 以下是来自菜鸟教程中的排序过程和动图示意: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置. 再从剩余未排序 ...
最新文章
- 如何成为一名数据中心运维工程师?
- Jmeter设置变量与引用变量(三)
- PostgreSql+PostGIS和uDig的安装
- 磁盘位置_Win10创建和附加虚拟硬盘|Win10怎么创建VHD虚拟磁盘
- 【Linux】 CentOS 7 安装 RabbitMQ
- 如何用方正飞腾做出“凹”形文本框
- java----EL表达式
- 新手先学java还是python_2018年,初学者学Java还是Python?统计数据给你答案
- OpenExplorer For Eclipse
- [4G5G专题-20]:架构-降低业务延时的移动边缘计算MEC-应用服务的下沉。
- 计算机视觉中的数学方法——7. 2 酉空间与酉矩阵
- Flutter 安卓微信分享提示签名不对
- maven 零散配置
- linux防火墙reject,Iptables 扩展动作 Reject Mark
- [跟练]基于七普修正Worldpop人口栅格数据(附2020年worldpop100m人口栅格)
- 机器学习-白板推导系列(一)-绪论(机器学习的MLE(最大似然估计)和MAP(最大后验估计))
- 阿里云1+X-云计算开发与运维-中级(多选题)
- 你为什么总是做出错误的选择?
- 关于延长程序员清明节假期的通知!
- ipad一代应用_通过下一代图像提高您的应用程序性能
热门文章
- 关于C#中Thread.Join()的一点理解
- 用于企业服务总线的类 USB 通用端口类型,第 1 部分: 当前 ESB 存在的问题
- 如何使用U盘制作Windows 7安装盘
- oracle初学心得(转)
- MySQL-第十四篇事务管理
- 数据库的点数据根据行政区shp来进行行政区处理,python定时器实现
- EXPLAIN 具体含义 ( type possible_key key key_len ref )
- Struts2之命名空间与Action的三种创建方式
- Android Studio 常用快捷键和使用技巧
- 创建一个新数组并指定数组的长度