亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Swift算法實(shí)現(xiàn)逐字翻轉(zhuǎn)字符串的方法示例

 更新時(shí)間:2017年03月21日 11:11:36   作者:李峰峰博客  
大家都知道翻轉(zhuǎn)字符串在字符串算法中算是比較常見(jiàn)的,下面這篇文章主要介紹了Swift算法實(shí)現(xiàn)逐字翻轉(zhuǎn)字符串的方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

前言

翻轉(zhuǎn)字符串在字符串算法中算是比較常見(jiàn)的,而且被很多公司用作筆試題。”逐字翻轉(zhuǎn)字符串”是翻轉(zhuǎn)字符串的翻版,也是之前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?

簡(jiǎn)而言之就是:”the sky is blue”—>”blue is sky the”

所以,對(duì)于本文,要解決的算法是:

逐字翻轉(zhuǎn)字符串,例如:"the sky is blue"—>"blue is sky the"

接下來(lái)看下實(shí)現(xiàn)思路和代碼。

實(shí)現(xiàn)思路及代碼

既然是字符串翻轉(zhuǎn)的翻版,我們就可以利用之前翻版字符串的思路去解決就可以了,不過(guò)這道題要有兩次翻轉(zhuǎn):

第一次翻轉(zhuǎn),整體翻轉(zhuǎn):”the sky is blue” -> “eulb si yks eht”

第二次翻轉(zhuǎn),單詞翻轉(zhuǎn):”eulb si yks eht” -> “blue is sky the”

所以,首先可以實(shí)現(xiàn)一個(gè)可以翻轉(zhuǎn)局部和全部字符串的算法,傳入字符數(shù)組、startIndex 和 endIndex ,其中 startIndex 和 endIndex 分別為要翻轉(zhuǎn)的字符串的起始下標(biāo)和結(jié)束下標(biāo),也就是要翻轉(zhuǎn) 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)
  
 }
 
}

之后就可以利用上面的算法去完成前面說(shuō)的兩次翻轉(zhuǎn):

func reverseWords(_ str:String) -> String{
 
 var chars = [Character](str.characters)
 
 //首先翻轉(zhuǎn)整個(gè)字符串所有字符,"the sky is blue" -> "eulb si yks eht"
 _reverseStr(&chars,0,chars.count-1)
 
 //然后翻轉(zhuǎn)每個(gè)單詞中的字符,"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)
}

完整算法代碼:

//翻轉(zhuǎn)指定范圍的字符
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)
  
 }
 
}
 
//逐字翻轉(zhuǎn)字符串
func reverseWords(_ str:String) -> String{
 
 var chars = [Character](str.characters)
 
 //首先翻轉(zhuǎn)整個(gè)字符串所有字符,"the sky is blue" -> "eulb si yks eht"
 _reverseStr(&chars,0,chars.count-1)
 
 //然后翻轉(zhuǎn)每個(gè)單詞中的字符,"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"

總結(jié)

以上就是關(guān)于Swift算法實(shí)現(xiàn)逐字翻轉(zhuǎn)字符串的方法,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Swift map和filter函數(shù)原型基礎(chǔ)示例

    Swift map和filter函數(shù)原型基礎(chǔ)示例

    這篇文章主要為大家介紹了Swift map和filter函數(shù)原型基礎(chǔ)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Swift 常量與變量實(shí)例詳解

    Swift 常量與變量實(shí)例詳解

    這篇文章主要介紹了Swift 常量與變量實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • SwiftUI 登錄界面布局實(shí)現(xiàn)示例詳解

    SwiftUI 登錄界面布局實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了SwiftUI 登錄界面布局實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Swift Extension擴(kuò)展得使用詳細(xì)介紹

    Swift Extension擴(kuò)展得使用詳細(xì)介紹

    在swift中,extension與Objective-C的category有點(diǎn)類(lèi)似,但是extension比起category來(lái)說(shuō)更加強(qiáng)大和靈活,它不僅可以擴(kuò)展某種類(lèi)型或結(jié)構(gòu)體的方法,同時(shí)它還可以與protocol等結(jié)合使用,編寫(xiě)出更加靈活和強(qiáng)大的代碼
    2022-09-09
  • 解決 Xcode 6-Beta2 智能提示bug

    解決 Xcode 6-Beta2 智能提示bug

    最近開(kāi)始學(xué)習(xí) Swift ,因?yàn)楦杏X(jué)這個(gè)真是個(gè)不錯(cuò)的東西,有很多新的特性,雖然 Titanium 之后也必定會(huì)支持,但總有不少東西要使用原生開(kāi)發(fā)才可以實(shí)現(xiàn),所以就乘這個(gè)新語(yǔ)言出來(lái)之際開(kāi)始學(xué)習(xí)啦!
    2014-07-07
  • Swift利用CoreData如何存儲(chǔ)多種數(shù)據(jù)類(lèi)的通訊錄

    Swift利用CoreData如何存儲(chǔ)多種數(shù)據(jù)類(lèi)的通訊錄

    這篇文章主要給大家介紹了關(guān)于Swift利用CoreData如何存儲(chǔ)多種數(shù)據(jù)類(lèi)的通訊錄的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • SwiftUI智能家居開(kāi)關(guān)燈頁(yè)面搭建示例

    SwiftUI智能家居開(kāi)關(guān)燈頁(yè)面搭建示例

    這篇文章主要為大家介紹了SwiftUI智能家居開(kāi)關(guān)燈頁(yè)面搭建示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 窺探Swift編程中的錯(cuò)誤處理與異常拋出

    窺探Swift編程中的錯(cuò)誤處理與異常拋出

    本文給大家整理些關(guān)于Swift編程中的錯(cuò)誤處理與異常拋出,本文介紹的非常詳細(xì),基于參考價(jià)值,特此分享腳本之家平臺(tái)供大家學(xué)習(xí)
    2016-02-02
  • Swift利用CoreData實(shí)現(xiàn)一個(gè)上班簽到的小工具

    Swift利用CoreData實(shí)現(xiàn)一個(gè)上班簽到的小工具

    這篇文章主要給大家介紹了關(guān)于Swift利用CoreData實(shí)現(xiàn)一個(gè)上班簽到小工具的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Swift?中的?JSON?反序列化示例詳解

    Swift?中的?JSON?反序列化示例詳解

    這篇文章主要為大家介紹了Swift中的JSON?反序列化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論