leetcode 345 Reverse Vowels of a String(翻轉支付串中的母音字母)
阿新 • • 發佈:2018-12-31
題目要求
寫一個函式,實現對於給定的字串中的母音字母進行翻轉。
注意輸入均為小寫,或者大寫字母。
演示示例
Example 1
Input: “hello”
Output: “holle”Example 2
Input: “leetcode”
Output: “leotcede”
解題思路
由於本題目中說明輸入只有字母類字元,所以不像題目leetcode125中對特殊字元進行判斷。
按照我們平時的思路是對字串進行翻轉(reverse函式),但是題目要求只對母音字母進行相應的翻轉,所以解題目的關鍵: 就是找到輸入字串中的母音字母。
具體程式中,我們用兩個變數(類雙指標法
當頭遇到母音字母的時候記下下標1,然後進行尾端遍歷直到遇到母音字母記下下標2,
隨後進行交換操作(swap()函式),重複上述操作直到兩個變數相遇,遍歷結束。
主要程式碼 c++
class Solution {
public:
string reverseVowels(string s) {
int left = 0, right = s.size()-1; // 兩個遍歷變數
while(left<right)
{
while(left<right && !isVowels (s[left]))
left++;
while(left<right && !isVowels(s[right]))
right--;
if(left<right)
{
swap(s[left],s[right]);
left++, right--;
}
}
return s;
}
bool isVowels( char c) // 判斷母音函式
{
return (c == 'A'|| c == 'E'|| c == 'I'|| c=='O'|| c=='U'||c == 'a'|| c == 'e'|| c == 'i'|| c=='o'|| c=='u');
}
};
其他方法
此外,也可以先遍歷整個字串,用一個容器記下母音字元的下標,再遍歷容器,進行字串的交換操作,只是兩次遍歷操作比上述提出的方法要消耗更多的時間資源。