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

  • 相关阅读:
    重载运算符 && 构造函数 的写法
    2019 ICPC Asia Xuzhou Regional
    中国剩余定理
    求逆元
    Exgcd
    Leading Robots
    大家好
    AtCoder Grand Contest 047 部分题解
    CodeForces 1389E Calendar Ambiguity 题解
    CodeForces 1380F Strange Addition 题解
  • 原文地址:https://www.cnblogs.com/yiruparadise/p/5674983.html
Copyright © 2011-2022 走看看