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. css常用属性初总结第一弹:id和class选择器

    前言:这是我第二次写博客,记录自己所学的点点滴滴,希望大家一起共勉! 说到选择器大家都不陌生,估计用的最多的还是id选择器和类选择器,至于其他的选择器,今天在这里我避而不谈. 类选择器:将html元素 ...

  2. C#给图片加文字和图片的水印

    /// <summary> /// WaterMark 的摘要说明 /// </summary> /// 图片加水印 /// <param name="strC ...

  3. RTX二次开发笔记1

    在客户端,一个rtx用户给另一个rtx用户发送消息! 我的解决方案:在rtx服务端部署一个 wcf服务 或 webservice 服务,然后程序在客户端调用服务就行. 1,C#版 (服务端需要4个DL ...

  4. Ubuntu Phone开箱上手

    在昨晚举行的发布会上Canonical和硬件厂商BQ进行合作,推出了首款面向消费市场的Ubuntu手机--Aquaris E4.5,带来了与常见的iPhone和Android机完全不同的操作体验,设备 ...

  5. 深入理解Cookie和Session机制

    转载理解Cookie和Session机制 目录 Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存二进制图片设置Cookie的所有属性Coo ...

  6. HDU 3363 Ice-sugar Gourd (贪心)

    题意:给你一个串,串中有H跟T两种字符,然后切任意刀,使得能把H跟T各自分为原来的一半. 析:由于只有两个字母,那么只要可以分成两份,那么一定有一段是连续的. 代码如下: #include <c ...

  7. JSTL标签总结备用

    前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多 ...

  8. C# JSON使用过程中开发的小工具

    我在用JSON的过程中,经常要去看一下JSON的结构,而JSON串大不部分时候都是未格式化的数据,一次我不得不用一些网页上的在线解析和格式化工具来进行格式化查看,但是这些网页有时候并不好用:因此就结合 ...

  9. 编写高质量代码改善C#程序的157个建议——建议135: 考虑使用肯定性的短语命名布尔属性

    建议135: 考虑使用肯定性的短语命名布尔属性 布尔值无非就是True和False,所以应该用肯定性的短语来表示它,例如,以Is.Can.Has作为前缀. 布尔属性正确命名的一个示例如下: class ...

  10. 编写高质量代码改善C#程序的157个建议——建议62:避免嵌套异常

    建议62:避免嵌套异常 应该允许异常在调用堆栈上往上传,不要过多的使用catch,然后再throw.过多的使用catch会带来两个问题: 1)代码更多了.这看上去好像你根本不知道怎么处理异常,所以你总 ...