您的位置:首页 > 理论基础 > 数据结构算法

LeetCode之旅-1

2016-06-29 12:53 204 查看
为了更好的学习掌握数据结构与算法,决定再网上找一些相关的题目来做,于是发现了leetcode。据说是为面试打造的,刚好也为以后的笔试做一些准备。里面的题目分为easy、medium、hard三种难易程度。我打算从易到难开始做。

做的第一道题是:Reverse String

题目内容:

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

Example:

Given s = “hello”, return “olleh”.

乍一看挺简单的,于是很快的写了如下代码:

public class Solution {
public String reverseString(String s) {
String result="";
for(int i=0;i<s.length();i++)
{
result +=s.substring(s.length()-i-1,s.length()-i);
}
return result;
}
}


然后运行后,没什么问题就提交了,不过结果却是:Time Limit Exceeded,运行超时…

又看了一下自己的代码,遍历字符串中每一个字符,然后拼接字符串。确实效率很低,于是想到了另一种方法,转换字符串实际上就是将字符串的首尾替换位置,于是有了以下代码:

public class Solution {
public String reverseString(String s) {
String result="";
char array[] = s.toCharArray();
char c;
for(int i=0;i<s.length()/2;i++)
{
c=array[i];
array[i]=array[s.length()-i-1];
array[s.length()-i-1]=c;
}
result = new String(array);
return result;
}
}


这次提交后,果然Accepted。不过用时是4ms,”Your runtime beats 38.92% of javasubmissions”,看到最好的方法是2ms,于是看了一下discuss,优化了自己的代码。

优化内容:

1.将s.length()改为array.length

2.将除法修改为加减法

优化后的代码:

public class Solution {
public String reverseString(String s) {
char array[] = s.toCharArray();
char c;
for(int i=0,j=array.length-1;i<j;i++,j--)
{
c=array[i];
array[i]=array[j];
array[j]=c;
}
return new String(array);
}
}


提交后运行时间为2ms…

以下是我的收获:

array.length比String.length()的运行效率高。 这个貌似很容易理解,length是array的一个属性,而length()是 String的一个方法。

加减法比乘除法的运行效率高。

写完代码后,如果有时间,尽量优化代码。

即便是解决一个简单的问题,同样也可以学习到知识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息