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实 ...
随机推荐
- [Locked] Unique Word Abbreviation
Unique Word Abbreviation An abbreviation of a word follows the form <first letter><number&g ...
- ZOJ3471--Most Powerful(状压DP)
有n(n<10)个小球,每两个碰撞有其中一个会消失,并产生一定能量.求产生最大能量. 有了正确思路题目比较简单,我的思路果然是歪的... 我的思路是dp[i][j]表示i这个状态剩下第j个小球, ...
- A Tour of Go Pointers
Go has pointers, but no pointer arithmetic. Struct fields can be accessed through a struct pointer. ...
- zoj 3460 Missile【经典建图&&二分】
Missile Time Limit: 2 Seconds Memory Limit: 65536 KB You control N missile launching towers. Ev ...
- C++下字符串转换
引用自:http://blog.sina.com.cn/s/blog_a98e39a20101ari9.html 把最近用到的各种unicode下类型转换总结了一下,今后遇到其他的再补充: 1.str ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析) 临时种群生成新父代种群 fillnds.c
/* Nond-domination based selection routines */ # include <stdio.h> # include <stdlib.h> ...
- JS获取浏览器可视区域尺寸
本文所说的是浏览器窗口的可视区域大小,不是浏览器窗口大小,也非页面尺寸. 在没有声明DOCTYPE的IE中,浏览器显示窗口大小只能以下获取: document.body.offsetWidth doc ...
- 计算json的和
var count=0; for(var i=0;i<data.length;i++){ count+=data[i].data; }
- asp.net Mvc+bootstarp+esayUI+EF 框架(一)
"框架" 这两个字从通俗的意义来讲就是提高复用性,解耦类之间的关系和方便开发人员开发. 使用的技术也是大家基本现在都用过的,而这个系类我所要讲的内容是什么呢? 框架的基本 ...
- 【Servlet】Servlet应用的get、post访问及和JSP的配合使用
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面. 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用 ...