leecode刷题(11)-- 反转字符串

反转字符串

描述:

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

示例 1:

输入: "hello"
输出: "olleh"

示例 2:

输入: "A man, a plan, a canal: Panama"
输出: "amanaP :lanac a ,nalp a ,nam A"

思路:

其实这道题我们很容易可以想到使用数组下标的方法,将字符串转换为 char 数组,遍历数组重新赋值。其中观察反转字符串可以知道,两个反转字符串字符的下标之和为字符串长度 - 1。

比如示例1 中,h 对应数组下标为 0,反转后的 h 对应数组下标为 4, 0 + 4 = 5 -1。

代码如下:

public class ReverseString {
public String reverseString(String s) {
if (s == null || s.length() == 0) {
return s;
}
int length = s.length();
char[] array = s.toCharArray();
for (int i = 0; i < length / 2; i++) {
char tmp = array[i];
array[i] = array[length - 1 - i];
array[length - 1 - i] = tmp;
}
return new String(array);
} public static void main(String[] args) {
String s = "hello";
ReverseString reverseString = new ReverseString();
System.out.println(reverseString.reverseString(s));
}
}

优化:

上边我们使用了交换数组下标的方法,其实java中有个函数叫 charAt(),解释如下:

charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。

所以我们更改我们的代码如下:

public class ReverseString {
public String reverseString(String s) {
if (s == null || s.length() == 0) {
return s;
}
int length = s.length();
char[] array = s.toCharArray();
for (int i = 0; i < length; i++) {
array[i] = s.charAt(length - 1 -i);
}
return new String(array);
} public static void main(String[] args) {
String s = "hello";
ReverseString reverseString = new ReverseString();
System.out.println(reverseString.reverseString(s));
}
}

但其实java中还有个更简单的反转函数 reverse(),就可以用来反转字符串,利用该方法,我们可以做到只写一行代码:

public class ReverseString {
public String reverseString(String s) {
if (s == null || s.length() == 0) {
return s;
}
return new StringBuffer(s).reverse().toString(); //即这行
} public static void main(String[] args) {
String s = "hello";
ReverseString reverseString = new ReverseString();
System.out.println(reverseString.reverseString(s));
}
}

总结:

可以看到,我们使用反转函数 reverse(),代码最少最简洁,但是直接调用 api 这种方法肯定跟我们刷 leecode 的初衷是不符的,理解字符串反转的思路是很重要的,是吧是吧(眨眼)。

leecode刷题(11)-- 反转字符串的更多相关文章

  1. leecode刷题(16)-- 字符串转换整数

    leecode刷题(16)-- 字符串转换整数 字符串转换整数 描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格 ...

  2. leecode刷题(12)-- 整数反转

    leecode刷题(12)-- 整数反转 整数反转 描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: - ...

  3. leecode刷题(22)-- 反转数组

    leecode刷题(22)-- 反转数组 反转数组 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3-> ...

  4. leecode刷题(15)-- 验证回文字符串

    leecode刷题(15)-- 验证回文字符串 验证回文字符串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 ...

  5. leecode刷题(13) -- 字符串中的第一个唯一字符

    leecode刷题(13) -- 字符串中的第一个唯一字符 字符串中的第一个唯一字符 描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = & ...

  6. leecode刷题(18)-- 报数

    leecode刷题(18)-- 报数 报数 描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 1112 ...

  7. python在leecode刷题-第一题和第七题

    class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] num ...

  8. leecode刷题(19)-- 最长公共前缀

    leecode刷题(19)-- 最长公共前缀 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: [&quo ...

  9. leecode刷题(17)-- 实现StrStr

    leecode刷题(17)-- 实现StrStr 实现StrStr 描述: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串 ...

随机推荐

  1. Dev的双击Gridview的DoubleClick

    注意: 是GridView的Double而不是GridControlprivate void gridView1_DoubleClick(object sender, EventArgs e){    ...

  2. Django框架开发web网站的网页优化—页面静态化

    网站优化-页面静态化 1)概念 提前将页面所用到的数据从数据库查询出来,然后生成一个静态页面,之后用户来访问的时候,直接返回静态页面. 举例:首页静态化:获取首页用到的数据表中的数据,生成静态首页in ...

  3. Shaders

    [Shaders] 1.Vertex-Lit,顶点光照着色器. Vertex-Lit is one of the simplest shaders. All lights shining on it ...

  4. Java-Properties文件读取工具类

    import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configurat ...

  5. 49. Group Anagrams同义词合并

    [抄题]: Given an array of strings, group anagrams together. Example: Input: ["eat", "te ...

  6. Java中的静态代理实现方式

    1.编写一个接口类 如:Subject package com.neusoft.pattern.staticProxy; /** * <p>Title:</p> * <p ...

  7. C#HTML解析利器HtmlAgilityPack

    HtmlAgilityPack是一个开源的解析HTML元素的类库,最大的特点是可以通过XPath来解析HMTL,如果您以前用C#操作过XML,那么使用起HtmlAgilityPack也会得心应手.目前 ...

  8. 关于super关键字

    1.在Java中,有时会遇到子类中的成员变量或方法与父类中的成员变量或方法同名.此时父类的成员变量或方法就会被隐藏(可以理解为重写),如果还想要使用父类中的这个成员变量或方法,就需要用到super. ...

  9. charles4.2下载与破解方法以及配置https.RP

    Charles下载地址 地址:https://www.charlesproxy.com/latest-release/download.do 2. Charles破解 破解地址:https://www ...

  10. 浅谈https\ssl\数字证书

    全球可信的SSL数字证书申请:http://www.shuzizhengshu.com 在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕 ...