全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Swift算法实现逐字翻转字符串的方法示例

前言

翻转字符串在字符串算法中算是比较常见的,而且被很多公司用作笔试题。”逐字翻转字符串”是翻转字符串的翻版,也是之前Google的面试题,原题是这样的:

Given an input string, reverse the string word by word.
A word is defined as a sequence of non-space characters.
The input string does not contain leading or trailing spaces and the words are always separated by a single space.
For example,
Given s = "the sky is blue",
return "blue is sky the".
Could you do it in-place without allocating extra space?

简而言之就是:”the sky is blue”—>”blue is sky the”

所以,对于本文,要解决的算法是:

逐字翻转字符串,例如:"the sky is blue"—>"blue is sky the"

接下来看下实现思路和代码。

实现思路及代码

既然是字符串翻转的翻版,我们就可以利用之前翻版字符串的思路去解决就可以了,不过这道题要有两次翻转:

第一次翻转,整体翻转:”the sky is blue” -> “eulb si yks eht”

第二次翻转,单词翻转:”eulb si yks eht” -> “blue is sky the”

所以,首先可以实现一个可以翻转局部和全部字符串的算法,传入字符数组、startIndex 和 endIndex ,其中 startIndex 和 endIndex 分别为要翻转的字符串的起始下标和结束下标,也就是要翻转 startIndex 和 endIndex 之间(包含)的字符,代码如下:

func _reverseStr( _ chars:inout [Character], _ startIndex:Int, _ endIndex:Int){
 
 var startIndex = startIndex
 var endIndex = endIndex
 
 if startIndex <= endIndex {
  
  let tempChar = chars[endIndex]
  chars[endIndex] = chars[startIndex]
  chars[startIndex] = tempChar
  
  startIndex += 1
  endIndex -= 1
  
  _reverseStr(&chars,startIndex,endIndex)
  
 }
 
}

之后就可以利用上面的算法去完成前面说的两次翻转:

func reverseWords(_ str:String) -> String{
 
 var chars = [Character](str.characters)
 
 //首先翻转整个字符串所有字符,"the sky is blue" -> "eulb si yks eht"
 _reverseStr(&chars,0,chars.count-1)
 
 //然后翻转每个单词中的字符,"eulb si yks eht" -> "blue is sky the"
 var startIndex = 0
 for endIndex in 0 ..< chars.count {
  if endIndex == chars.count - 1 || chars[endIndex + 1] == " " {
   _reverseStr(&chars, startIndex, endIndex)
   startIndex = endIndex + 2
  }
 }
 
 return String(chars)
}

完整算法代码:

//翻转指定范围的字符
func _reverseStr( _ chars:inout [Character], _ startIndex:Int, _ endIndex:Int){
 
 var startIndex = startIndex
 var endIndex = endIndex
 
 if startIndex <= endIndex {
  
  let tempChar = chars[endIndex]
  chars[endIndex] = chars[startIndex]
  chars[startIndex] = tempChar
  
  startIndex += 1
  endIndex -= 1
  
  _reverseStr(&chars,startIndex,endIndex)
  
 }
 
}
 
//逐字翻转字符串
func reverseWords(_ str:String) -> String{
 
 var chars = [Character](str.characters)
 
 //首先翻转整个字符串所有字符,"the sky is blue" -> "eulb si yks eht"
 _reverseStr(&chars,0,chars.count-1)
 
 //然后翻转每个单词中的字符,"eulb si yks eht" -> "blue is sky the"
 var startIndex = 0
 for endIndex in 0 ..< chars.count {
  if endIndex == chars.count - 1 || chars[endIndex + 1] == " " {
   _reverseStr(&chars, startIndex, endIndex)
   startIndex = endIndex + 2
  }
 }
 
 return String(chars)
}
 
reverseWords("the sky is blue") //return "blue is sky the"

总结

以上就是关于Swift算法实现逐字翻转字符串的方法,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# swift  # 字符串  # 字符串拼接  # Swift5中从原始文本创建字符串的方法  # swift 3.0中实现字符串截取、比较的方法示例  # swift 字符串String的使用方法  # Swift算法实现字符串转数字的方法示例  # Swift语言中字符串相关的基本概念解析  # Swift心得笔记之字符串  # Swift教程之字符串和字符详解  # Swift 字符串类型及常用方法详解总结  # 就可以  # 两次  # 词中  # 是这样  # 要有  # 分别为  # 可以实现  # 谢谢大家  # 这道  # 面试题  # 有疑问  # characters  # leading  # blue  # space  # trailing  # separated  # spaces  # single  # words 


相关文章: 建站之星如何快速解决建站难题?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  招贴海报怎么做,什么是海报招贴?  深圳网站制作的公司有哪些,dido官方网站?  为什么Go需要go mod文件_Go go mod文件作用说明  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  浅析上传头像示例及其注意事项  清除minerd进程的简单方法  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  ,石家庄四十八中学官网?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  建站之星后台管理系统如何操作?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何快速搭建高效简练网站?  如何登录建站主机?访问步骤全解析  中山网站制作网页,中山新生登记系统登记流程?  建站之星各版本价格是多少?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  网站网页制作专业公司,怎样制作自己的网页?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  如何用PHP工具快速搭建高效网站?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何快速生成专业多端适配建站电话?  如何通过商城免费建站系统源码自定义网站主题?  网站制作服务平台,有什么网站可以发布本地服务信息?  太原网站制作公司有哪些,网约车营运证查询官网?  Swift中switch语句区间和元组模式匹配  SQL查询语句优化的实用方法总结  公司网站的制作公司,企业网站制作基本流程有哪些?  Android使用GridView实现日历的简单功能  如何在云服务器上快速搭建个人网站?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  在线制作视频的网站有哪些,电脑如何制作视频短片?  定制建站如何定义?其核心优势是什么?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  建站之星如何助力企业快速打造五合一网站?  建站之星客服服务时间及联系方式如何?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何快速搭建高效服务器建站系统?  制作网站怎么制作,*游戏网站怎么搭建?  如何通过虚拟机搭建网站?详细步骤解析  如何在IIS中新建站点并解决端口绑定冲突?  MySQL查询结果复制到新表的方法(更新、插入)  建站之星如何防范黑客攻击与数据泄露? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。