您的位置:首页 > 其它

leetcode 345. Reverse Vowels of a String 只反转字符串元音字符

2017-10-02 18:07 519 查看
Write a function that takes a string as input and reverse only the vowels of a string.

Example 1:

Given s = “hello”, return “holle”.

Example 2:

Given s = “leetcode”, return “leotcede”.

Note:

The vowels does not include the letter “y”.

这道题考察的是反转一个字符串中的所有的元音字符,使用双指针,然后交换即可。

代码如下:

/*
* 双向指针,一次遍历即可,交换所有的元音字符
* */
class Solution
{
public String reverseVowels(String s)
{
StringBuilder builder=new StringBuilder(s);

int i=0;
int j=builder.length()-1;
while(i<j)
{
boolean a=isVowel(builder.charAt(i));
boolean b=isVowel(builder.charAt(j));
if(a&&b)
{
char tmp=builder.charAt(i);
builder.setCharAt(i, builder.charAt(j));
builder.setCharAt(j, tmp);
i++;
j--;
}else if(a && !b)
j--;
else if(!a && b)
i++;
else
{
i++;
j--;
}
}
return builder.toString();
}

public boolean isVowel(char a)
{
if(a=='a'||a=='e'||a=='i'||a=='o'||a=='u'
||a=='A'||a=='E'||a=='I'||a=='O'||a=='U')
return true;
else
return false;
}

}


下面是C++的做法,遍历即可

代码如下:

#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <string>
#include <climits>
#include <algorithm>
#include <sstream>
#include <functional>
#include <bitset>
#include <numeric>
#include <cmath>
#include <regex>

using namespace std;

class Solution
{
public:
string reverseVowels(string s)
{
if (s.length() <= 0)
return s;

int i = 0, j = s.length() - 1;
while (i < j)
{
bool a = isVowels(s[i]);
bool b = isVowels(s[j]);
if (a == true && b == true)
{
swap(s[i], s[j]);
i++;
j--;
}else if (a == true && b == false)
j--;
else if (a == false && b == true)
i++;
else
{
i++;
j--;
}

}
return s;
}

bool isVowels(char a)
{
if (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u'|| a == 'A' || a == 'E' || a == 'I' || a == 'O' || a == 'U')
return true;
else
return false;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: