• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >swift > Swift算法实现逐字翻转字符串的方法示例

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

作者:李峰峰博客 字体:[增加 减小] 来源:互联网 时间:2017-05-28

李峰峰博客 通过本文主要向大家介绍了swift算法,swift 字符串,swift 遍历字符串,swift 字符串长度,json字符串示例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言

翻转字符串在字符串算法中算是比较常见的,而且被很多公司用作笔试题。”逐字翻转字符串”是翻转字符串的翻版,也是之前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?
</div>

简而言之就是:”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)
  
 }
 
}
</div>

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

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)
}
</div>

完整算法代码:

//翻转指定范围的字符
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"
</div>

总结

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Swift算法之二叉树实现的方法示例
  • Swift算法实现字符串转数字的方法示例
  • Swift算法实现逐字翻转字符串的方法示例
  • 简单理解插入排序算法及Swift版的代码示例
  • 快速排序算法在Swift编程中的几种代码实现示例
  • Swift实现快速排序算法的代码示例
  • Swift代码实现冒泡排序算法的简单实例

相关文章

  • 2017-05-28Swift3.0 GCD定时器的使用DEMO
  • 2017-05-28gson ajax 数字精度丢失问题的解决方法
  • 2017-05-28Swift之UITabBarController 导航控制器的自定义
  • 2017-05-22Swift 闭包
  • 2017-05-28Swift3.0剪切板代码拷贝及跨应用粘贴实现代码
  • 2017-05-28Swift中swift中的switch 语句
  • 2017-05-28Swift数组详细用法解析
  • 2017-05-28swift实现自定义圆环进度提示效果
  • 2017-05-22Swift 构造过程
  • 2017-05-22Swift 可选链

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Swift开发中switch语句值绑定模式
    • MySQL+SSM+Ajax上传图片问题
    • Swift中的访问控制和protected
    • Swift编程中实现希尔排序算法的代码实例
    • 理解二叉堆数据结构及Swift的堆排序算法实现示例
    • swift学习文档(笔记)
    • Swift编程中数组的使用方法指南
    • Mybatis传list参数调用oracle存储过程的解决方法
    • Swift 循环
    • Swift 可选链

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有