zoukankan      html  css  js  c++  java
  • ReverseString

    今天第一次刷leetcode的题啊,最简单的一题,就出现超时不通过╮(╯▽╰)╭

    题目如下:

    Write a function that takes a string as input and returns the string reversed.
    
    Example:
    Given s = "hello", return "olleh".

     

    我写的代码是:(真的是最笨的方法╮(╯▽╰)╭)

    public static String reverseString(String s) {
            char[] arrs = s.toCharArray();
            String result = "";
            for (int i = (arrs.length - 1); i >= 0; i--) {
                result = result + arrs[i];
            }
            return result;
    }

    提交以后,超时啊~~

    public String reverseString(String s) {
            if(s == null) return null;
            if(s.equals("")) return s;
            char[] arrChar = s.toCharArray();
            for (int i = 0, j = arrChar.length-1; i <= j; i++, j--) {
                char temp = arrChar[i];
                arrChar[i] = arrChar[j];
                arrChar[j] = temp;
            }
            return new String(arrChar);
     }

    看了别人的讨论,如下几种方法 Many acceptable answers

    Cheating Method using StringBuilder

    public class Solution {
        public String reverseString(String s) {
            return  new StringBuilder(s).reverse().toString();
        }
    }

     Classic Method by swapping first and last

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

     Same as previous but using byte instead

    public class Solution {
        public String reverseString(String s) {
            byte[] bytes = s.getBytes();
            int i = 0;
            int j = s.length() - 1;
            while (i < j) {
                byte temp = bytes[i];
                bytes[i] = bytes[j];
                bytes[j] = temp;
                i++;
                j--;
            }
            return new String(bytes);
        }
    }

    Classic Method by swapping first and last
    If you don't like temp variable

    public class Solution {
        public String reverseString(String s) {
            byte[] bytes = s.getBytes();
            int i = 0;
            int j = s.length() - 1;
            while (i < j) {
                bytes[i] = (byte)(bytes[i] ^ bytes[j]);
                bytes[j] = (byte)(bytes[i] ^ bytes[j]);
                bytes[i] = (byte)(bytes[i] ^ bytes[j]);
                i++;
                j--;
            }
            return new String(bytes);
        }
    }

    Using recursion

    public class Solution {
        public String reverseString(String s) {
            int length = s.length();
            if (length <= 1) return s;
            String leftStr = s.substring(0, length / 2);
            String rightStr = s.substring(length / 2, length);
            return reverseString(rightStr) + reverseString(leftStr);
        }
    }

     

    脑子短路ing

  • 相关阅读:
    揭秘重度MMORPG手游后台性能优化方案
    算法:贪心、回溯(su)、分治、动态规划,思想简要
    表单提交 curl和浏览器方式
    mysql 聚集索引,非聚集索引,覆盖索引区别。
    虚拟机中的Linux不能上网
    第二篇 界面开发 (Android学习笔记)
    第一篇 入门必备 (Android学习笔记)
    C/C++知识补充 (1)
    向后/向前引用, 零宽断言, 转义, 命名分组
    C/C++知识补充(2) C/C++操作符/运算符的优先级 & 结合性
  • 原文地址:https://www.cnblogs.com/yiruparadise/p/5674983.html
Copyright © 2011-2022 走看看