Tips:定义两个指针,left和right
-更多题解请见本系列目录
java 和 c# 十分类似,感觉语法在互相降重,搞的晕头转向,一会大写一会小写,一会有括号一会没括号 python还是很高效 与官方思路求同存异,似乎两个逻辑存在一种运算关系 四种方法的代码如下:
python
class Solution :
def reverseVowels ( self, s: str ) - > str :
def isVowel ( character: str ) - > bool :
return character in "aeiouAEIOU"
length = len ( s)
s = list ( s)
left, right = 0 , length- 1
while left< right:
if isVowel( s[ left] ) and isVowel( s[ right] ) :
s[ left] , s[ right] = s[ right] , s[ left]
left += 1
right -= 1
if not isVowel( s[ left] ) :
left += 1
if not isVowel( s[ right] ) :
right -= 1
return str ( "" . join( s) )
C++
class Solution {
public :
string reverseVowels ( string s) {
auto isVowel = [ vowels= "aeiouAEIOU" s] ( char ch)
{
return vowels. find ( ch) != string:: npos;
} ;
int length = s. size ( ) ;
int left = 0 ;
int right = length - 1 ;
while ( left < right)
{
if ( ! isVowel ( s[ left] ) ) left++ ;
if ( ! isVowel ( s[ right] ) ) right-- ;
if ( isVowel ( s[ left] ) && isVowel ( s[ right] ) )
{
swap ( s[ left] , s[ right] ) ;
left++ ;
right-- ;
}
}
return s;
}
} ;
Java
class Solution {
public String reverseVowels ( String s) {
int n = s. length ( ) ;
char [ ] arr = s. toCharArray ( ) ;
int left= 0 , right = n- 1 ;
while ( left< right)
{
while ( left< n && ! isVowel ( arr[ left] ) ) left++ ;
while ( right> 0 && ! isVowel ( arr[ right] ) ) right-- ;
if ( left< right)
{
Swap ( arr, left, right) ;
left++ ;
right-- ;
}
}
return new String ( arr) ;
}
public boolean isVowel ( char ch)
{
return "aeiouAEIOU" . indexOf ( ch) >= 0 ;
}
public void Swap ( char [ ] arr, int i, int j)
{
char temp = arr[ i] ;
arr[ i] = arr[ j] ;
arr[ j] = temp;
}
}
C#
public class Solution {
public string ReverseVowels ( string s) {
int n = s. Length;
char [ ] arr = s. ToCharArray ( ) ;
int left= 0 , right = n- 1 ;
while ( left< right)
{
while ( left< n && ! IsVowel ( s[ left] ) ) left++ ;
while ( right> 0 && ! IsVowel ( s[ right] ) ) right-- ;
if ( left< right)
{
Swap ( arr, left, right) ;
left++ ;
right-- ;
}
}
return new string ( arr) ;
}
public bool IsVowel ( char ch)
{
return "aeiouAEIOU" . IndexOf ( ch) >= 0 ;
}
public void Swap ( char [ ] arr, int i, int j)
{
char temp = arr[ i] ;
arr[ i] = arr[ j] ;
arr[ j] = temp;
}
}