leetcode (Reverse Vowels of a String)
阿新 • • 發佈:2018-12-23
Title:Reverse Vowels of a String 345
Difficulty:Easy
原題leetcode地址:https://leetcode.com/problems/reverse-vowels-of-a-string/
1. 雙指標
時間複雜度:O(n),一次一層while迴圈,最長遍歷整個陣列。
空間複雜度:O(n),申請StringBuilder和字元陣列。
/** * 雙指標 * @param s * @return */ public static String reverseVowels(String s) { if (s.length() == 0) { return ""; } int begin = 0; int end = s.length() - 1; char sChar[] = s.toCharArray(); StringBuilder sb = new StringBuilder(); while (begin < end) { if (isVowels(sChar[begin]) && isVowels(sChar[end])) { char tmp = sChar[begin]; sChar[begin] = sChar[end]; sChar[end] = tmp; begin++; end--; } if (!isVowels(sChar[begin]) && isVowels(sChar[end])) { begin++; } if (isVowels(sChar[begin]) && !isVowels(sChar[end])) { end--; } if (!isVowels(sChar[begin]) && !isVowels(sChar[end])) { begin++; end--; } } for (int i = 0; i < sChar.length; i++) { sb.append(sChar[i]); } return sb.toString(); } private static boolean isVowels(char c) { switch (c) { case 'a': case 'A': case 'e': case 'E': case 'i': case 'I': case 'o': case 'O': case 'u': case 'U': return true; default : return false; } }