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. 使用tcmalloc编译启动时宕机

    链接时增加了-ltcmalloc,编好之后服务器第一次启动就宕机了,code文件堆栈如下: Program terminated with signal SIGABRT, Aborted. # ) a ...

  2. 解决OpenFeign默认无法上传文件的问题

    前言 最近在项目中使用OpenFeign时,发现其不支持文件上传功能.网上找了很多资料,最后找到feign-form和feign-form-spring的解决方案.但其默认只支持单文件上传,不支持多文 ...

  3. 4600007972内销新单未取进FP

    1.首先检查 in_sales_order表: select * from in_sales_order where so_id='04600007972'发现没有数据 2.接着检查从SAP导数的步骤 ...

  4. Linux buffer and cache

    A buffer is something that has yet to be "written" to disk. A cache is something that has ...

  5. LoadRunner11学习记录五 -- 错误提示分析

    LoadRunner测试结果具体分析: 一.错误提示分析  分析实例: 1.Error: Failed to connect to server “172.17.7.230″: [10060] Con ...

  6. web.xml配置详解[转]

    引文: 对于一个J2EE领域的程序员而言,基本上每天都会和web应用打交道. 什么是web应用?最简单的web应用什么样?给你一个web应用你该从何入手? 1.什么是web应用? web应用是一种可以 ...

  7. [GO]方法的继承

    package main import "fmt" type Person struct { name string sex byte age int } func (tmp Pe ...

  8. mvc中使用Hangfire处理后台任务

    考虑下如下代码,在数据保存后,需要发送邮件,发送邮件是个耗时的工作. 我们的目的是,数据保存成功后,就可以返回响应了,发送邮件不重要,不需要等待邮件发送成功 [HttpPost] public Act ...

  9. 使用virtualBox安装CentOS 6.3的详细步骤

    由于前几天把系统升级到win7了,原先安装的Linux虚拟机都不存在了.基于学习,这次安装选择的是CentOS 6.3版本. 下面就看看具体的安装步骤: 名称可以随便填写,类型选择Linux,版本选择 ...

  10. iOS基础教程:在建好的项目中加入CoreData[转]

    这几天在做一个ios的小项目,项目中需要对数据进行基本的增删改查操作.于是就想用一把CoreData.但在创建项目初期,没有包含进CoreData.于是就在已建好的项目中加入CoreData.由于第一 ...