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 算法相关推荐

  1. Rust机器学习之tch-rs

    Rust机器学习之tch-rs tch-rs是PyTorch接口的Rust绑定,可以认为tch-rs是Rust版的PyTorch.本文将带领大家学习如何用tch-rs搭建深度神经网络识别MNIST数据 ...

  2. Rust机器学习之Linfa

    Rust机器学习之Linfa 本文将带领大家用Linfa实现一个完整的Logistics回归,过程中带大家学习Linfa的基本用法. 本文是"Rust替代Python进行机器学习" ...

  3. 【5G/4G】128-EEA1与128-NEA1算法详解

    文章目录 128-EEA1与128-NEA1算法详解 本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. 博客 ...

  4. Rust机器学习之ndarray

    Rust机器学习之ndarray 众所周知,Python之所以能成为机器学习的首选语言,与其丰富易用的库有很大关系.某种程度上可以说是诸如numpy.pandas.scikit-learn.matpl ...

  5. github开源学习项目推荐

    目录 1.洛雪音乐助手桌面版 2.CS 自学指南 3.计算机书籍资源 4.Python - 100天从新手到大师 5.小林 x 图解计算机基础 1.洛雪音乐助手桌面版 洛雪音乐助手桌面版https:/ ...

  6. [Codewar练习-javac++]Twice linear(双线性)

    问题: 段位:4 说明: 假设一个数组 arr,里面的元素是这样的规律: 1.arr[ 0 ] = 1; 2.每一个 arr[ i ] 都存在  2 * arr[ i ] + 1 和 3 * arr[ ...

  7. 推荐一些非常有用的学习网站

    昨天的文章很多人表示很受用,同时有人留言让我推荐一些学习渠道啥的,马上双 11,姑且忙中偷闲送波福利给你们,今天就给你们推荐一些绝对有用的学习网站. 1. free-programming-books ...

  8. [Codewar练习-jsc++]N Linear(N线性)

    问题: 段位:4 说明: 假设一个数组 arr 和 另一个数组 arr2,里面的元素是这样的规律: 1.arr[ 0 ] = 1; 2.每一个 arr[ i ] 都存在  arr2[0] * arr[ ...

  9. Rust 算法排位记 - 插入排序的图示和代码实现

    Rust 代码在编写过程中与其它语言的略有不同,因为它的编译器不允许有任何不安全的写法,遂代码编写过程中花费时间最长的莫过于查找编译报错的原因.这样也有好处--代码写好之后,稳定性高得一笔! 以下是来 ...

  10. Rust 算法排位记-选择排序图示与代码实现

    听说你们在家闷得快要发霉了,来点新鲜的吧.集中注意力,让时间过得更快一些! 以下是来自菜鸟教程中的排序过程和动图示意: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置. 再从剩余未排序 ...

最新文章

  1. 如何成为一名数据中心运维工程师?
  2. Jmeter设置变量与引用变量(三)
  3. PostgreSql+PostGIS和uDig的安装
  4. 磁盘位置_Win10创建和附加虚拟硬盘|Win10怎么创建VHD虚拟磁盘
  5. 【Linux】 CentOS 7 安装 RabbitMQ
  6. 如何用方正飞腾做出“凹”形文本框
  7. java----EL表达式
  8. 新手先学java还是python_2018年,初学者学Java还是Python?统计数据给你答案
  9. OpenExplorer For Eclipse
  10. [4G5G专题-20]:架构-降低业务延时的移动边缘计算MEC-应用服务的下沉。
  11. 计算机视觉中的数学方法——7. 2 酉空间与酉矩阵
  12. Flutter 安卓微信分享提示签名不对
  13. maven 零散配置
  14. linux防火墙reject,Iptables 扩展动作 Reject Mark
  15. [跟练]基于七普修正Worldpop人口栅格数据(附2020年worldpop100m人口栅格)
  16. 机器学习-白板推导系列(一)-绪论(机器学习的MLE(最大似然估计)和MAP(最大后验估计))
  17. 阿里云1+X-云计算开发与运维-中级(多选题)
  18. 你为什么总是做出错误的选择?
  19. 关于延长程序员清明节假期的通知!
  20. ipad一代应用_通过下一代图像提高您的应用程序性能

热门文章

  1. 关于C#中Thread.Join()的一点理解
  2. 用于企业服务总线的类 USB 通用端口类型,第 1 部分: 当前 ESB 存在的问题
  3. 如何使用U盘制作Windows 7安装盘
  4. oracle初学心得(转)
  5. MySQL-第十四篇事务管理
  6. 数据库的点数据根据行政区shp来进行行政区处理,python定时器实现
  7. EXPLAIN 具体含义 ( type possible_key key key_len ref )
  8. Struts2之命名空间与Action的三种创建方式
  9. Android Studio 常用快捷键和使用技巧
  10. 创建一个新数组并指定数组的长度