• [Swift]LeetCode345. 反转字符串中的元音字母 | Reverse Vowels of a String


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10262100.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Write a function that takes a string as input and reverse only the vowels of a string.

    Example 1:

    Input: "hello"
    Output: "holle"
    

    Example 2:

    Input: "leetcode"
    Output: "leotcede"

    Note:
    The vowels does not include the letter "y".


    编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

    示例 1:

    输入: "hello"
    输出: "holle"
    

    示例 2:

    输入: "leetcode"
    输出: "leotcede"

    说明:
    元音字母不包含字母"y"。


    84ms

     1 class Solution {
     2     func reverseVowels(_ s: String) -> String {
     3         var a = Array(s)
     4         var i = 0
     5         var j = a.count - 1
     6         
     7         while i < j {
     8             if !isVowel(a[i]) {
     9                 i += 1
    10             } else if !isVowel(a[j]) {
    11                 j -= 1
    12             } else {
    13                 (a[i], a[j]) = (a[j], a[i])
    14                 i += 1
    15                 j -= 1
    16             }
    17         }
    18         
    19         return String(a)
    20     }
    21     
    22     func isVowel(_ c: Character) -> Bool {
    23         switch c {
    24         case "a","e","i","o","u","A","E","I","O","U":
    25             return true
    26         default:
    27             return false
    28         }
    29     }
    30 }

    120ms

     1 class Solution {
     2     let vowels: Set<Character> = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
     3     func reverseVowels(_ s: String) -> String {
     4         if s.count < 2 { return s }
     5         var chars = Array(s)
     6         var start = 0
     7         var end = chars.count - 1
     8         while start < end {
     9             while start < end && !vowels.contains(chars[start]) {
    10                 start += 1
    11             }
    12             
    13             while end > start && !vowels.contains(chars[end]) {
    14                 end -= 1
    15             }
    16             if start != end {
    17                 chars.swapAt(start, end)
    18                 start += 1
    19                 end -= 1
    20             }
    21         }
    22         return String(chars)
    23     }
    24 }

    144ms

     1 class Solution {
     2     func reverseVowels(_ s: String) -> String {
     3         let set: Set<Character> = [Character("a"), Character("e"), Character("i"), Character("o"), Character("u"),Character("A"), Character("E"), Character("I"), Character("O"), Character("U")]
     4         var chars = Array(s)
     5         var left = 0
     6         var right = s.count - 1
     7         while left < right {
     8             if set.contains(chars[left]) && set.contains(chars[right]) {
     9                 chars.swapAt(left, right)
    10                 left += 1
    11                 right -= 1
    12             } else if set.contains(chars[left]) {
    13                 right -= 1
    14             } else {
    15                 left += 1
    16             }
    17         }
    18 
    19         return String(chars)
    20     }
    21 }

    152ms

     1 class Solution {
     2     func reverseVowels(_ s: String) -> String {
     3         if s.count == 0 {
     4            return ""
     5         }
     6         
     7         var chas = s.cString(using:.ascii)!
     8         
     9         var left = 0
    10         var right = s.count - 1
    11         
    12         var loop = true
    13         
    14         while loop {
    15             if left > right {
    16                 loop = false
    17                 break
    18             } 
    19             
    20             let leftChar = chas[left]
    21             
    22             if !checkIsYuanChar(leftChar) {
    23                 left = left + 1
    24                 continue
    25             }
    26             
    27             let rightChar = chas[right] 
    28             
    29             if !checkIsYuanChar(rightChar) {
    30                 right = right - 1
    31                 continue
    32             }
    33             
    34             chas[left] = rightChar
    35             chas[right] = leftChar
    36             
    37             left = left + 1
    38             right = right - 1
    39         }
    40         
    41         var newStr = String.init(cString:chas)
    42         
    43         return newStr
    44     }
    45     
    46 
    47     
    48     func checkIsYuanChar(_ c: CChar) -> Bool {
    49         if c == 65 || c == 97 {
    50             return true
    51         }
    52         if c == 69 || c == 101 {
    53             return true
    54         }
    55         if c == 73 || c == 105 {
    56             return true
    57         }
    58         if c == 79 || c == 111 {
    59             return true
    60         }
    61         if c == 85 || c == 117 {
    62             return true
    63         }
    64         
    65         return false
    66     
    67     }
    68 }

    192ms

     1 class Solution {
     2     func reverseVowels(_ s: String) -> String {
     3         // a e i o u
     4         let set: Set<Character> = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
     5         var indexArray = [Int]()
     6         var valueArray = [Character]()
     7         var array = [Character](s)
     8         for (index, c) in array.enumerated() {
     9             if set.contains(c) {
    10                 indexArray.append(index)
    11                 valueArray.append(c)
    12             }
    13         }
    14         let reversed = Array(valueArray.reversed())
    15         for i in 0 ..< indexArray.count {
    16             array[indexArray[i]] = reversed[i]
    17         }
    18         return String(array)
    19     }
    20 }

    260ms

     1 class Solution {
     2     func reverseVowels(_ s: String) -> String {
     3         let yuanyin:[Character] = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"]
     4         
     5         var arr = Array(s)
     6         
     7         var left = 0
     8         var right = s.count - 1
     9         while left < right {
    10             
    11             while !yuanyin.contains(arr[left]) && left < right {
    12                 left += 1
    13             }
    14             while !yuanyin.contains(arr[right]) && left < right {
    15                 right -= 1
    16             }
    17             
    18             (arr[left], arr[right]) = (arr[right], arr[left])
    19             left += 1
    20             right -= 1
    21         }
    22         
    23         return String(arr)
    24     }
    25 }

    428ms

     1 class Solution {
     2     func reverseVowels(_ s: String) -> String {
     3         var sArr = Array(s)
     4         var vowels = [Character]()
     5         let v = "aeiouAEIOU"
     6         
     7         for c in sArr where v.contains(c) {
     8             vowels.append(c)
     9         }
    10         
    11         for i in 0..<sArr.count  {
    12             let c = sArr[i]
    13             if v.contains(c) {
    14                 sArr[i] = vowels.removeLast()
    15             }
    16         }
    17         
    18         return String(sArr)
    19     }
    20 }
  • 相关阅读:
    python之enumerate枚举 第二篇(六):enumerate枚举
    git使用学习
    Git安装
    eclipse对项目整理分类
    Java基础学习总结——Java对象的序列化和反序列化
    工作代码实例
    substring与substr
    第一个jave程序-helloworld
    UI自动化
    sikuli实例
  • 原文地址:https://www.cnblogs.com/strengthen/p/10262100.html
Copyright © 2020-2023  润新知