好久没刷题,准备刷起来了,leetcode都300多题了, 世界变化太快
随便找了个简单题,Reverse String,很自然就想到用StringBuilder从尾到头撸一遍,代码如下
public class Solution {
public String reverseString(String s) {
if(s == null || s.length() == 0){
return "";
}
StringBuilder sb = new StringBuilder();
for(int i = s.length() - 1; i >= 0; i--){
sb.append(s.charAt(i));
}
return sb.toString();
}
}
提交了一下Accepted,难道这题就这么直白吗?
看了一下Discuss,不刷提水平确实还是差了点,一个pointer遍历是O(n),two pointers就是1/2 O(n), 同样是O(n), 速度差了一倍, 一个6ms, 一个3ms
public class Solution {
public String reverseString(String s) {
if(s == null || s.length() == 0){
return "";
}
char[] arr = s.toCharArray();
int i = 0;
int j = s.length() - 1;
while(i < j){
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
return new String(arr);
}
}
https://discuss.leetcode.com/topic/43296/many-acceptable-answers 这个里面还有用byte[ ] 来解的,没怎么用过byte,需要研究一下