Swift算法实现逐字翻转字符串的方法示例
前言
翻转字符串在字符串算法中算是比较常见的,而且被很多公司用作笔试题。”逐字翻转字符串”是翻转字符串的翻版,也是之前Google的面试题,原题是这样的:
Givenaninputstring,reversethestringwordbyword. Awordisdefinedasasequenceofnon-spacecharacters. Theinputstringdoesnotcontainleadingortrailingspacesandthewordsarealwaysseparatedbyasinglespace. Forexample, Givens="theskyisblue", return"blueisskythe". Couldyoudoitin-placewithoutallocatingextraspace?
简而言之就是:”theskyisblue”—>”blueisskythe”
所以,对于本文,要解决的算法是:
逐字翻转字符串,例如:"theskyisblue"—>"blueisskythe"
接下来看下实现思路和代码。
实现思路及代码
既然是字符串翻转的翻版,我们就可以利用之前翻版字符串的思路去解决就可以了,不过这道题要有两次翻转:
第一次翻转,整体翻转:”theskyisblue”->“eulbsiykseht”
第二次翻转,单词翻转:”eulbsiykseht”->“blueisskythe”
所以,首先可以实现一个可以翻转局部和全部字符串的算法,传入字符数组、startIndex和endIndex,其中startIndex和endIndex分别为要翻转的字符串的起始下标和结束下标,也就是要翻转startIndex和endIndex之间(包含)的字符,代码如下:
func_reverseStr(_chars:inout[Character],_startIndex:Int,_endIndex:Int){ varstartIndex=startIndex varendIndex=endIndex ifstartIndex<=endIndex{ lettempChar=chars[endIndex] chars[endIndex]=chars[startIndex] chars[startIndex]=tempChar startIndex+=1 endIndex-=1 _reverseStr(&chars,startIndex,endIndex) } }
之后就可以利用上面的算法去完成前面说的两次翻转:
funcreverseWords(_str:String)->String{ varchars=[Character](str.characters) //首先翻转整个字符串所有字符,"theskyisblue"->"eulbsiykseht" _reverseStr(&chars,0,chars.count-1) //然后翻转每个单词中的字符,"eulbsiykseht"->"blueisskythe" varstartIndex=0 forendIndexin0..完整算法代码:
//翻转指定范围的字符 func_reverseStr(_chars:inout[Character],_startIndex:Int,_endIndex:Int){ varstartIndex=startIndex varendIndex=endIndex ifstartIndex<=endIndex{ lettempChar=chars[endIndex] chars[endIndex]=chars[startIndex] chars[startIndex]=tempChar startIndex+=1 endIndex-=1 _reverseStr(&chars,startIndex,endIndex) } } //逐字翻转字符串 funcreverseWords(_str:String)->String{ varchars=[Character](str.characters) //首先翻转整个字符串所有字符,"theskyisblue"->"eulbsiykseht" _reverseStr(&chars,0,chars.count-1) //然后翻转每个单词中的字符,"eulbsiykseht"->"blueisskythe" varstartIndex=0 forendIndexin0..总结
以上就是关于Swift算法实现逐字翻转字符串的方法,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。