最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

翻轉(zhuǎn)字符串在字符串算法中算是比較常見的,而且被很多公司用作筆試題?!敝鹱址D(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)一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Swift 3.0基礎(chǔ)學(xué)習(xí)之?dāng)U展

    Swift 3.0基礎(chǔ)學(xué)習(xí)之?dāng)U展

    擴(kuò)展是向一個(gè)已有的類、結(jié)構(gòu)體或枚舉類型添加新的功能(在swift中擴(kuò)展沒有名字)。相當(dāng)于Objective-C中Category(OC中可以有名字的,而且只能擴(kuò)展類)。這篇文章主要介紹了Swift 3.0基礎(chǔ)學(xué)習(xí)之?dāng)U展的相關(guān)資料,需要的朋友可以參考下。
    2017-03-03
  • swift4更新中所遇到的一些問題總結(jié)

    swift4更新中所遇到的一些問題總結(jié)

    這篇文章主要給大家介紹了關(guān)于在swift4更新中所遇到的一些問題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • 簡(jiǎn)單分析Swift語(yǔ)言的一些基本特征

    簡(jiǎn)單分析Swift語(yǔ)言的一些基本特征

    這篇文章主要介紹了Swift語(yǔ)言的一些基本特征,本文從各語(yǔ)言最基礎(chǔ)的類與對(duì)象等方面來(lái)講,需要的朋友可以參考下
    2015-07-07
  • Swift協(xié)議Protocol介紹

    Swift協(xié)議Protocol介紹

    協(xié)議規(guī)定了用來(lái)實(shí)現(xiàn)某一特定功能所必需的方法和屬性。任意能夠滿足協(xié)議要求的類型被稱為遵循(conform)這個(gè)協(xié)議。類,結(jié)構(gòu)體或枚舉類型都可以遵循協(xié)議,并提供具體實(shí)現(xiàn)來(lái)完成協(xié)議定義的方法和功能
    2022-08-08
  • 在Mac OS的終端中運(yùn)行Swift應(yīng)用的方法

    在Mac OS的終端中運(yùn)行Swift應(yīng)用的方法

    這篇文章主要介紹了在Mac OS的終端中運(yùn)行Swift應(yīng)用的方法,依靠Xcode的REPL功能來(lái)實(shí)現(xiàn),需要的朋友可以參考下
    2015-07-07
  • swift3.0指紋解鎖的實(shí)現(xiàn)方法

    swift3.0指紋解鎖的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了swift3.0指紋解鎖的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 用Swift編寫自動(dòng)錄音器

    用Swift編寫自動(dòng)錄音器

    這篇文章主要介紹了用Swift編寫自動(dòng)錄音器,有需要的朋友可以借鑒下
    2015-07-07
  • Swift中的條件切換語(yǔ)句switch...case學(xué)習(xí)教程

    Swift中的條件切換語(yǔ)句switch...case學(xué)習(xí)教程

    這篇文章主要介紹了Swift中的條件切換語(yǔ)句switch...case學(xué)習(xí)教程,Swift中的switch...case支持的數(shù)據(jù)類型很多,非常之強(qiáng)大,需要的朋友可以參考下
    2016-04-04
  • swift語(yǔ)言AutoreleasePool原理及使用場(chǎng)景

    swift語(yǔ)言AutoreleasePool原理及使用場(chǎng)景

    這篇文章主要為大家介紹了swift語(yǔ)言AutoreleasePool原理及使用場(chǎng)景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • swift計(jì)步器CMPedometer的使用方法

    swift計(jì)步器CMPedometer的使用方法

    這篇文章主要為大家詳細(xì)介紹了swift計(jì)步器CMPedometer的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09

最新評(píng)論

青田县| 如皋市| 枣强县| 莱西市| 镇赉县| 信丰县| 秭归县| 璧山县| 遂平县| 宾阳县| 巩义市| 慈溪市| 黄浦区| 玉林市| 临朐县| 五常市| 河北省| 浪卡子县| 泸水县| 红原县| 广昌县| 芜湖市| 古交市| 儋州市| 容城县| 黄大仙区| 桃江县| 潮州市| 霍州市| 邵阳市| 宕昌县| 涡阳县| 新龙县| 明星| 垦利县| 永仁县| 铜鼓县| 凤冈县| 民丰县| 翼城县| 舞钢市|