leetcode345——Reverse Vowels of a String(C++)
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++)的更多相关文章
- 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 ...
- LeetCode 345. Reverse Vowels of a String(双指针)
题意:给定一个字符串,反转字符串中的元音字母. 例如: Input: "leetcode" Output: "leotcede" 法一:双指针 class So ...
- 【leetcode80】Reverse Vowels of a String(元音字母倒叙)
题目描述: 写一个函数,实现输入一个字符串,然后把其中的元音字母倒叙 注意 元音字母包含大小写,元音字母有五个a,e,i,o,u 原文描述: Write a function that takes a ...
- LeetCode算法题-Reverse Vowels of a String(Java实现-四种解法)
这是悦乐书的第206次更新,第218篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第74题(顺位题号是345).编写一个函数,它将一个字符串作为输入,并仅反转一个字符串的 ...
- 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 ...
- 【leetcode】345. Reverse Vowels of a String
problem 345. Reverse Vowels of a String class Solution { public: string reverseVowels(string s) { , ...
- 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 ...
- 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 ...
- 345. Reverse Vowels of a String - LeetCode
Question 345. Reverse Vowels of a String Solution 思路:交换元音,第一次遍历,先把出现元音的索引位置记录下来,第二遍遍历元音的索引并替换. Java实 ...
随机推荐
- 15个实用的Linux find命令示例
妈咪,我找到了! -- 15个实用的Linux find命令示例 http://www.oschina.net/translate/15-practical-linux-find-command-ex ...
- Excel引用
Excel引用 1.绝对引用 相对引用 A:A 左右拉的话会自动变为 B:B,C:C等等 $A:$A 左右拉的话仍然是A列 A$1:A1 上下拉的话,会变成A$1:A2,A$1:A3等等
- 你真的知道C#的TryParse吗?
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:你真的知道C#的TryParse吗?.
- UIImageC处理
UIImageC处理 1.等比缩放 - (UIImage *) scaleImage:(UIImage *)image toScale:(float)scaleSize { UIGraphicsBeg ...
- 在JSP页面中输出JSON格式数据
JSON-taglib是一套使在JSP页面中输出JSON格式数据的标签库. JSON-taglib主页: http://json-taglib.sourceforge.net/index.html J ...
- 更改cmd语言(chcp)
chcp 437 更改为英文 chcp 936 更改为简体中文 mode con cp select=437 mode con cp /status chcp cmd /c "chcp 43 ...
- 用WebCollector爬取站点的图片
用WebCollector爬取整站图片,仅仅须要遍历整站页面.然后将URL为.jpg.gif的页面(文件)保存到本地就可以. 比如我们爬取一个美食站点,获取里面全部的图片: import cn.edu ...
- 《编程导论(Java)·2.1.3改写(override)》
<编程导论(Java)·2.1.3改写(override)>,收集override内容. 方法改写(method overriding)是指对于父类定义的一个实例方法,同意子类提供自己的实 ...
- iOS开发中常见的语句@synthesize obj=obj的意义详解
我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...
- 谈谈Javascript线程
其实,大家都知道Javascript的语言执行环境是单线程的,浏览器无论在什么时候都有且只有一个线程在运行Javascript程序.那Ajax发送异步请求怎么解释,setTimeout/s ...