问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3933 访问。

编写一个函数,其作用是将输入的字符串反转过来。

输入: "hello"

输出: "olleh"

输入: "A man, a plan, a canal: Panama"

输出: "amanaP :lanac a ,nalp a ,nam A"


Write a function that takes a string as input and returns the string reversed.

Input: "hello"

Output: "olleh"

Input: "A man, a plan, a canal: Panama"

Output: "amanaP :lanac a ,nalp a ,nam A"


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3933 访问。

public class Program {

    public static void Main(string[] args) {
var s = "A man, a plan, a canal: Panama"; var res = ReverseString(s);
Console.WriteLine(res); s = "private static string ReverseString(string s)"; res = ReverseString2(s);
Console.WriteLine(res); s = "using System.Collections.Generic;"; res = ReverseString3(s);
Console.WriteLine(res); s = "var res = ReverseString(s);"; res = ReverseString4(s);
Console.WriteLine(res); s = "Console.WriteLine(res);"; res = ReverseString5(s);
Console.WriteLine(res); s = "var sb = new StringBuilder();"; res = ReverseString6(s);
Console.WriteLine(res); Console.ReadKey();
} private static string ReverseString(string s) {
//LeetCode超时未AC
var stack = new Stack<char>();
foreach(var c in s) {
stack.Push(c);
}
var res = string.Empty;
while(stack.Count != 0) {
res += stack.Pop();
}
return res;
} private static string ReverseString2(string s) {
//LeetCode超时未AC
var list = new List<char>();
foreach(var c in s) {
list.Add(c);
}
var res = string.Empty;
for(var i = list.Count - 1; i >= 0; i--) {
res += list[i];
}
return res;
} private static string ReverseString3(string s) {
var length = s.Length;
var i = 0;
var j = length - 1;
var chars = new char[length];
while(i <= length - 1) {
chars[j] = s[i];
i++;
j--;
}
return new string(chars);
} private static string ReverseString4(string s) {
var chars = s.ToCharArray();
var start = 0;
var end = s.Length - 1;
while(start < end) {
var swap = chars[start];
chars[start] = chars[end];
chars[end] = swap;
start++;
end--;
}
return new String(chars);
} private static string ReverseString5(string s) {
var sb = new StringBuilder();
for(var i = s.Length - 1; i >= 0; i--) {
sb.Append(s[i]);
}
return sb.ToString();
} private static string ReverseString6(string s) {
var arr = s.ToCharArray();
Array.Reverse(arr);
return new string(arr);
} }

以上给出6种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3933 访问。

amanaP :lanac a ,nalp a ,nam A
)s gnirts(gnirtSesreveR gnirts citats etavirp
;cireneG.snoitcelloC.metsyS gnisu
;)s(gnirtSesreveR = ser rav
;)ser(eniLetirW.elosnoC
;)(redliuBgnirtS wen = bs rav

分析:

显而易见,以上6种算法的时间复杂度均为:  。

C#LeetCode刷题之#344-反转字符串​​​​​​​(Reverse String)的更多相关文章

  1. C#LeetCode刷题之#443-压缩字符串​​​​​​​(String Compression)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3943 访问. 给定一组字符,使用原地算法将其压缩. 压缩后的长度 ...

  2. C#LeetCode刷题之#205-同构字符串(Isomorphic Strings)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3770 访问. 给定两个字符串 s 和 t,判断它们是否是同构的. ...

  3. C#LeetCode刷题之#557-反转字符串中的单词 III(Reverse Words in a String III)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3955 访问. 给定一个字符串,你需要反转字符串中每个单词的字符顺 ...

  4. C#LeetCode刷题之#345-反转字符串中的元音字母​​​​​​​(Reverse Vowels of a String)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3935 访问. 编写一个函数,以字符串作为输入,反转该字符串中的元 ...

  5. C#LeetCode刷题之#859-亲密字符串​​​​​​​​​​​​​​(Buddy Strings)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3973 访问. 给定两个由小写字母构成的字符串 A 和 B ,只要 ...

  6. C#LeetCode刷题之#541-反转字符串 II(Reverse String II)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3951 访问. 给定一个字符串和一个整数 k,你需要对从字符串开头 ...

  7. 说了你可能不信leetcode刷题局部链表反转D92存在bug,你看了就知道了

    一.题目描述 找出数组中重复的数字 > 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. ...

  8. leetcode刷题七<整数反转>

    给出一个 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 : 输入: 输出: 示例 : 输入: - 输出: - 示例 : 输入: 输出: 假设我们的环境只能存储得下 32 位的有符号整 ...

  9. LeetCode刷题笔记-递归-反转二叉树

    题目描述: 翻转一棵二叉树. 解题思路: 1.对于二叉树,立马递归 2.先处理 根节点,不需改动 3.处根的左子树和右子树需要交换位置 4.递归处理左子树和右子树.步骤见1-3步 Java代码实现: ...

随机推荐

  1. Appium+Python3环境搭建,其实超简单!【软件测试教程】

    appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python.略懂Python,所以接下来的教程是appium+python, ...

  2. Go Pentester - HTTP Servers(3)

    Building Middleware with Negroni Reasons use middleware, including logging requests, authenticating ...

  3. Ethical Hacking - GAINING ACCESS(3)

    Sever side attacks code execution Let‘s analyze the Zenmap scan result first and search for somethin ...

  4. 题解 CF1359A 【Berland Poker】

    题意 给出 \(n,m,k\) ,表示 \(k\) 名玩家打牌,共 \(n\) 张牌,\(m\) 张王,保证 \(k|n\) ,记得分为 拿到最多王的玩家手中王数 \(-\)拿到第二多王的玩家手中的王 ...

  5. SQL 给某字段添加汉字却显示??

    错误展示: 解决方案: 1.在要修改的数据库上单击鼠标右键,并选择“属性”.   2.在弹出的数据库属性窗口中点击“选择页”中的“选项”.   3.将排序规则由默认的SQL_Latin1_Genera ...

  6. Redis集群搭建(哨兵)

    最近工作中需要用到redis哨兵集群,笔者自己搭建了3遍,直接开始 环境: 1,系统环境 系统 版本 操作系统 CentOS 7.4 Redis 5.0.8 2,IP请修改成自己的IP redis I ...

  7. H5移动端,ios从后台返回到app,页面会白一下

    visibilitychange事件可以检查从后台返回事件,然后通过添加div,强制浏览器刷新页面 var divEle = document.createElement("DIV" ...

  8. web自动化 -- 三种等待方式

    一.强制等待 二.隐式等待 注:隐式等待的作用域是全局,所以一般设置在整局代码的头几行. 如: 三.显示等待 元素存在: 元素可见: 元素可点击: 看到上图源码中有一个   element.is_en ...

  9. integrator.java目录

    integrater 目录d:\zixing\zxing-zxing-3.3.2\android-integration\src\main\java\com\google\zxing\integrat ...

  10. shell 格式化数据,转换为execl

    awk '  BEGIN { OFS="\t"} ;{ $1=$1 ; print $8,$NF} ' >/root/log/aa.xlsx awk '  BEGIN { O ...