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".

个人博客:http://www.cnblogs.com/wdfwolf3/

这道题在逆置字符串的基础上加入了限制,只做原音(aeiouAEIOU)的逆置,不理会非原因的字符。在这里我主要针对如何判断原因讲述几个方法,至于字符串逆置不再讨论,可以看我专门写Reverse String的博文http://www.cnblogs.com/wdfwolf3/p/5484675.html

1.调用函数判断(16ms)

这个最基本最容易想到实现,没什么难度。

class Solution {
public:
string reverseVowels(string s) {
int i=,j=s.length()-;
while(i<j)
{
while((isVowel(s[i])==false)&&(i<j))
{
i++;
}
while((isVowel(s[j])==false)&&(i<j))
{
j--;
}
swap(s[i],s[j]);
i++;
j--;
}
return s;
}
bool isVowel(char c)
{
if((c=='a')||(c=='e')||(c=='i')||(c=='o')||(c=='u')||(c=='A')||(c=='E')||(c=='I')||(c=='O')||(c=='U'))
return true;
return false;
}
};

2.利用数组模拟哈希表的方式(12ms)

class Solution {
public:
string reverseVowels(string s) {
int dict[] = {};
dict['a']=;
dict['A']=;
dict['e']=;
dict['E']=;
dict['i']=;
dict['I']=
dict['o']=;
dict['O']=;
dict['u']=;
dict['U']=;
int i=,j=s.length()-;
while(i<j)
{
while((dict[s[i]]==)&&(i<j))
{
i++;
}
while((dict[s[j]]==)&&(i<j))
{
j--;
}
swap(s[i],s[j]);
i++;
j--;
}
return s;
}
};

3.利用字符串查找函数string.find()或者string.find_first_of()。关于这两个函数在最后面详细介绍。

class Solution {
public:
string reverseVowels(string s) {
string vowel="aeiouAEIOU";
int i=,j=s.length()-;
while(i<j)
{
while((vowel.find(s[i])==string::npos)&&(i<j))
{
i++;
}
while((vowel.find(s[j])==string::npos)&&(i<j))
{
j--;
}
swap(s[i],s[j]);
i++;
j--;
}
return s;
}
};

(12ms)

string vowel="aeiouAEIOU";
int i=,j=s.length()-;
while(i<j)
{
i=s.find_first_of(vowel,i);
j=s.find_last_of(vowel,j);
if(i>=j)
break;
swap(s[i],s[j]);
i++;
j--;
}
return s;

(13ms)

P.S.

1.str1.find(str2, , )

作用是在str1中查找str2的位置,str2可以是单个字符,字符串变量或者字符串;第二个参数是str1的起始查找位置,即从str1的哪个位置开始查找,默认为0;第三个参数是只查找str2的前多少个字符,默认是str2的全部。可以没有后两个参数。返回的是str2首个字符在str1的位置,如果没有找到的话返回string::npos,它有几层含义,本身它是一个常量-1,当作为返回值时表示查找失败;在使用下标时,它大于任何下标(逻辑上概念),可以看作字符串的尽头或者说结尾。

2.string.find_first_of(str, , )

参数作用同上。但是函数作用是不同的,返回的值是str中任何一个字符首次在string中出现的位置。上一个函数相当于匹配,这个更像筛选。

3.string.find_last_of(str, , )

参数作用同上,作用也同上。区别是这个是向前查找的,从第二个参数位置开始向前找到str中任何一个字符首次在string中出现的位置,自然默认参数为string::npos。

leetcode345——Reverse Vowels of a String(C++)的更多相关文章

  1. 345. Reverse Vowels of a String(C++)

    345. Reverse Vowels of a String Write a function that takes a string as input and reverse only the v ...

  2. LeetCode 345. Reverse Vowels of a String(双指针)

    题意:给定一个字符串,反转字符串中的元音字母. 例如: Input: "leetcode" Output: "leotcede" 法一:双指针 class So ...

  3. 【leetcode80】Reverse Vowels of a String(元音字母倒叙)

    题目描述: 写一个函数,实现输入一个字符串,然后把其中的元音字母倒叙 注意 元音字母包含大小写,元音字母有五个a,e,i,o,u 原文描述: Write a function that takes a ...

  4. LeetCode算法题-Reverse Vowels of a String(Java实现-四种解法)

    这是悦乐书的第206次更新,第218篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第74题(顺位题号是345).编写一个函数,它将一个字符串作为输入,并仅反转一个字符串的 ...

  5. LeetCode | Reverse Words in a String(C#)

    题目: Given an input string, reverse the string word by word. For example,Given s = "the sky is b ...

  6. 【leetcode】345. Reverse Vowels of a String

    problem 345. Reverse Vowels of a String class Solution { public: string reverseVowels(string s) { , ...

  7. 345. Reverse Vowels of a String【easy】

    345. Reverse Vowels of a String[easy] Write a function that takes a string as input and reverse only ...

  8. LeetCode_345. Reverse Vowels of a String

    345. Reverse Vowels of a String Easy Write a function that takes a string as input and reverse only ...

  9. 345. Reverse Vowels of a String - LeetCode

    Question 345. Reverse Vowels of a String Solution 思路:交换元音,第一次遍历,先把出现元音的索引位置记录下来,第二遍遍历元音的索引并替换. Java实 ...

随机推荐

  1. Recommended add-ons/plugins for Microsoft Visual Studio [closed]

    SmartPaster - (FREE) Copy/Paste code generator for strings AnkhSvn - (FREE) SVN Source Control Integ ...

  2. Add And Reset a Federation Server to a Federation Server Farm adfs ad

    Applies To: Active Directory Federation Services (AD FS) 2.0 After you install the Active Directory ...

  3. linux c 及 c++打印调用者函数caller function的方法,包括arm c平台

    一般情况下,编译的时候可能需要加 -g 选项,对于android ndk的-g选项添加请参见android类目下的另一篇文章. 以下文章中的__builtin_return_address() 宏,若 ...

  4. advanced dom scripting dynamic web design techniques Part One DOM SCRIPTING IN DETAIL CHAPTER 1 DO IT RIGHT WITH BEST PRACTICES

    You’re excited; your client is excited. All is well. You’ve just launched the client’s latest websit ...

  5. hdoj 2546 饭卡

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  6. Ⅴ.spring的点点滴滴--引用其他对象或类型的成员

    承接上文 引用其他对象或类型的成员 .net篇(环境为vs2012+Spring.Core.dll v1.31) public class Person { public string Name { ...

  7. 获取WINDOWS特殊文件夹

    const// registry entries for special paths are kept in :  REGSTR_PATH_SPECIAL_FOLDERS   = REGSTR_PAT ...

  8. [Whole Web, Nods.js, PM2] Passing environment variables to node.js using pm2

    learn how to pass environment variables to your node.js app using the pm2 config file. This is usefu ...

  9. Java 加密 MD5

    版权声明:本文为博主原创文章,未经博主允许不得转载. [md5] md5是一种哈希算法,哈希算法是啥? ... 特点是不能解密. [代码] package com.uikoo9.util.encryp ...

  10. open/close table on mysql

    http://hidba.org/?p=170   我们知道mysql是一个支持多线程的数据库,尤其在innodb存储引擎出现后,对mysql的事务,并发,锁支持得到了极大提高.在高并发的访问的应用场 ...