C#LeetCode刷题之#345-反转字符串中的元音字母(Reverse Vowels of a String)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3935 访问。
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
输入: "hello"
输出: "holle"
输入: "leetcode"
输出: "leotcede"
说明:元音字母不包含字母"y"。
Write a function that takes a string as input and reverse only the vowels of a string.
Given s = "hello", return "holle".
Given s = "leetcode", return "leotcede".
Note:The vowels does not include the letter "y".
示例
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3935 访问。
public class Program {
public static void Main(string[] args) {
var s = "holle";
var res = ReverseVowels(s);
Console.WriteLine(res);
s = "leotcede";
res = ReverseVowels2(s);
Console.WriteLine(res);
Console.ReadKey();
}
private static string ReverseVowels(string s) {
//暴力解法
//LeetCode超时未AC
//记录元音字母
var vowels = new List<char>() {
'a','e','i','o','u',
'A','E','I','O','U'
};
//字典记录所有元音字母及位置
var dic = new Dictionary<int, char>();
for(var i = 0; i < s.Length; i++) {
if(vowels.Contains(s[i])) {
dic[i] = s[i];
}
}
//两两前后交换所有元音值
for(var i = 0; i < dic.Count / 2; i++) {
var key1 = dic.ElementAt(i).Key;
var key2 = dic.ElementAt(dic.Count - i - 1).Key;
var swap = dic[key1];
dic[key1] = dic[key2];
dic[key2] = swap;
}
//重新规划元音字符串顺序
var res = new StringBuilder(s);
foreach(var item in dic) {
res[item.Key] = item.Value;
}
//返回结果
return res.ToString();
}
private static string ReverseVowels2(string s) {
//双指针法
//记录元音字母
var vowels = new List<char>() {
'a','e','i','o','u',
'A','E','I','O','U'
};
//转换成 char 数组
//因为 C# 的字符串索引器是只读的,所以这是必须的
var chars = s.ToCharArray();
//前后双指针法
var i = 0;
var j = s.Length - 1;
//循环直到指针碰撞时为止
while(i < j) {
//从左向右找到元音字符
while(i < j && !vowels.Contains(chars[i])) i++;
//从右向左找到元音字符
while(i < j && !vowels.Contains(chars[j])) j--;
//交换它们,注意这里的条件是必须的
if(i < j) {
var swap = chars[i];
chars[i++] = chars[j];
chars[j--] = swap;
}
}
//返回结果
return new string(chars);
}
}
以上给出2种算法实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3935 访问。
hello
leetcode
分析:
显而易见,以上2种算法的时间复杂度均为: 。
C#LeetCode刷题之#345-反转字符串中的元音字母(Reverse Vowels of a String)的更多相关文章
- [Swift]LeetCode345. 反转字符串中的元音字母 | Reverse Vowels of a String
Write a function that takes a string as input and reverse only the vowels of a string. Example 1: In ...
- Java实现 LeetCode 345 反转字符串中的元音字母
345. 反转字符串中的元音字母 编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 ...
- Leetcode 345. 反转字符串中的元音字母 By Python
编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leet ...
- LeetCode:反转字符串中的元音字母【345】
LeetCode:反转字符串中的元音字母[345] 题目描述 编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "h ...
- 【leetcode 简单】 第八十三题 反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leet ...
- 345 Reverse Vowels of a String 反转字符串中的元音字母
编写一个函数,以字符串作为输入,反转该字符串中的元音字母.示例 1:给定 s = "hello", 返回 "holle".示例 2:给定 s = "l ...
- C#LeetCode刷题之#557-反转字符串中的单词 III(Reverse Words in a String III)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3955 访问. 给定一个字符串,你需要反转字符串中每个单词的字符顺 ...
- leetCode题解之反转字符串中的元音字母
1.问题描述 Reverse Vowels of a String Write a function that takes a string as input and reverse only the ...
- LeetCode 557:反转字符串中的单词 III Reverse Words in a String III
公众号:爱写bug(ID:icodebugs) 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. Given a string, you need to reve ...
随机推荐
- 静态代理,动态代理和CGLIB代理模式
代理模式 一.概述 代理是一种模式,提供了对目标对象的间接访问方式,即通过代理访问目标对象.如此便于在目标实现的基础上增加额外的功能操作,前拦截,后拦截等,以满足自身的业务需求,同时代理模式便于扩展目 ...
- CentOS8.0 Docker Repository
一.硬件软件准备 1.2台服务器或者电脑(使用云服务器1.阿里云 2.百度云各一台) ,系统均为CentOS 8.0 2.分别安装Docker 3.测试镜像准备(准备的是 ...
- Vuex里的module选项和移动端布局
Vuex里的modules 在store文件夹里创建一个modules的文件夹,里面随意创建一个.js文件,然后export输出
- 016.Nginx HTTPS
一 HTTPS概述 1.1 HTTPS介绍 超文本传输安全协议HTTPS(Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯 ...
- 简单了解InnoDB底层原理
存储引擎 很多文章都是直接开始介绍有哪些存储引擎,并没有去介绍存储引擎本身.那么究竟什么是存储引擎?不知道大家有没有想过,MySQL是如何存储我们丢进去的数据的? 其实存储引擎也很简单,我认为就是一种 ...
- 线程_进程间通信Queue合集
# Queue的工作原理 from multiprocessing import Queue q = Queue(3)#初始化一个Queue对象,最多可接收3条put消息 q.put("In ...
- 4-Pandas之数据类型与数据筛选
一.数据类型 1.Pandas的数据类型主要结合了pandas和numpy两个模块中的数据类型,包括以下几种: float int bool datetime64[ns]------>日期类型 ...
- 使用 MySQLi 和 PDO 向 MySQL 插入数据
PHP MySQL 插入数据 使用 MySQLi 和 PDO 向 MySQL 插入数据 在创建完数据库和表后,我们可以向表中添加数据. 以下为一些语法规则: PHP 中 SQL 查询语句必须使用引号 ...
- PHP curl_share_setopt函数
(PHP 5 >= 5.5.0) curl_share_setopt — 设置 cURL 共享句柄的一个选项. 说明 bool curl_share_setopt ( resource $sh ...
- luogu P4726 【模板】多项式指数函数 多项式 exp 牛顿迭代 泰勒展开
LINK:多项式 exp 做多项式的题 简直在嗑药. 前置只是 泰勒展开 这个东西用于 对于一个函数f(x) 我们不好得到 其在x处的取值. 所以另外设一个函数g(x) 来在x点处无限逼近f(x). ...