前言

翻转字符串在字符串算法中算是比较常见的,而且被很多公司用作笔试题。”逐字翻转字符串”是翻转字符串的翻版,也是之前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小时内与您取得联系。