Easy
433818FavoriteShare
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++:
/* * @Autor: SourDumplings * @Date: 2019-09-12 23:48:51 * @Link: https://github.com/SourDumplings/ * @Email: changzheng300@foxmail.com * @Description: https://leetcode.com/problems/reverse-vowels-of-a-string/ */ class Solution { public: string reverseVowels(string s) { set<char> vowels({'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'}); int l = s.length(); int i = 0, j = l - 1; while (i < j) { while (i < j && vowels.find(s[i]) == vowels.end()) ++i; while (i < j && vowels.find(s[j]) == vowels.end()) --j; if (i < j) { swap(s[i], s[j]); ++i; --j; } } return s; } };Java:
import java.util.Set; /* * @Autor: SourDumplings * @Date: 2019-09-13 15:51:47 * @Link: https://github.com/SourDumplings/ * @Email: changzheng300@foxmail.com * @Description: https://leetcode.com/problems/reverse-vowels-of-a-string/ */ class Solution { public String reverseVowels(String s) { int i = 0, j = s.length() - 1; char[] ss = s.toCharArray(); Set<Character> set = new HashSet<>(); set.add('a'); set.add('e'); set.add('i'); set.add('o'); set.add('u'); set.add('A'); set.add('E'); set.add('I'); set.add('O'); set.add('U'); while (i < j) { while (i < j && !set.contains(ss[i])) { ++i; } while (i < j && !set.contains(ss[j])) { --j; } if (i < j) { char temp = ss[i]; ss[i] = ss[j]; ss[j] = temp; ++i; --j; } } return String.copyValueOf(ss); } }