--- tags: LeetCode --- # 345. Reverse Vowels of a String 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". 輸入範本如下 ```C# public class Solution { public string ReverseVowels(string s) { } } ``` ### 直覺想法 使用兩個指標 , 一個從頭開始 , 一個從尾開始 , 分別去找母音. 若找到則交換. ```C# 104 ms 28.4 MB You are here! Your runtime beats 68.95 % of csharp submissions. public string ReverseVowels(string s) { char[] voewls = new char[] { 'a', 'e', 'i', 'o', 'u' }; char[] charStr = s.ToCharArray(); int left = 0, right = charStr.Length - 1; for (; left < right; left++, right--) { while (left < right && !voewls.Contains(char.ToLower(charStr[left]))) left++; while (left < right && !voewls.Contains(char.ToLower(charStr[right]))) right--; var temp = charStr[right]; charStr[right] = charStr[left]; charStr[left] = temp; } return new string(charStr); } ``` 槓 , 忘記查詢應該使用字典才對 , O(1) 的查詢時間 ```C# 88 ms 27.1 MB You are here! Your runtime beats 97.87 % of csharp submissions. public string ReverseVowels(string s) { var voewls = new HashSet<char> { 'a', 'e', 'i', 'o', 'u' }; char[] charStr = s.ToCharArray(); int left = 0, right = charStr.Length - 1; for (; left < right; left++, right--) { while (left < right && !voewls.Contains(char.ToLower(charStr[left]))) left++; while (left < right && !voewls.Contains(char.ToLower(charStr[right]))) right--; var temp = charStr[right]; charStr[right] = charStr[left]; charStr[left] = temp; } return new string(charStr); } ``` ### Thank you! You can find me on - [GitHub](https://github.com/s0920832252) - [Facebook](https://www.facebook.com/fourtune.chen) 若有謬誤 , 煩請告知 , 新手發帖請多包涵 # :100: :muscle: :tada: :sheep: