leetcode代码练习

最近开始在 LeetCode 里面刷算法题,记录一下,代码在 github

  1. 反转字符串

    编写一个函数,其作用是将输入的字符串反转过来。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public String reverseString(String s) {
    char[] char1 = s.toCharArray();
    int l = char1.length;
    char[] char2 = new char[l];
    for (int i = 0; i < l; i++) {
    char2[i] = char1[l - i - 1];
    }
    return String.valueOf(char2);
    }
  2. 颠倒整数

    给定一个 32 位有符号整数,将整数中的数字进行反转。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public int reverse(int x) {
    if (x == 0) {
    return x;
    }
    if (x > 0) {
    String xString = String.valueOf(x);
    String xStringReverse = reverseString(xString);
    long xReverse = Long.valueOf(xStringReverse);
    if (xReverse > 2147483647) {
    return 0;
    }
    return (int) xReverse;
    }

    long y = 0 - (long)x;
    String yString = String.valueOf(y);
    String yStringReverse = reverseString(yString);
    long yReverse = Long.valueOf(yStringReverse);
    if (yReverse > 2147483647) {
    return 0;
    }
    return (int) (0 - yReverse);
    }
  3. 字符串中的第一个唯一字符

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public int firstUniqChar(String s) {
    char[] chars = s.toCharArray();
    for (char c: chars) {
    if (s.indexOf(c) == s.lastIndexOf(c)) {
    return s.indexOf(c);
    }
    }
    return -1;
    }
  4. 有效的字母异位词

    给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public boolean isAnagram(String s, String t) {
    Map<Character, Integer> sMap = new HashMap<>();
    for (char c: s.toCharArray()) {
    if (sMap.containsKey(c)) {
    int cCount = sMap.get(c) + 1;
    sMap.replace(c, cCount);
    } else {
    sMap.put(c, 1);
    }
    }
    for (char c: t.toCharArray()) {
    if (sMap.containsKey(c)) {
    int cCount = sMap.get(c) - 1;
    if (cCount < 0) {
    return false;
    } else if (cCount == 0) {
    sMap.remove(c);
    } else {
    sMap.replace(c, cCount);
    }
    } else {
    return false;
    }
    }
    if (sMap.size() > 0) {
    return false;
    }
    return true;
    }
  5. 验证回文字符串

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public boolean isPalindrome(String s) {
    if (s.equals("")) {
    return true;
    }
    List<Character> characterList1 = string2charList(s);
    int l = characterList1.size();
    for (int i = 0; i < l / 2; i++) {
    if (characterList1.get(i) != characterList1.get(l - i - 1)) {
    return false;
    }
    }
    return true;
    }

    private List<Character> string2charList(String s) {
    s = s.toLowerCase();
    List<Character> characterList = new ArrayList<>();
    for (char c: s.toCharArray()) {
    if (Character.isLetter(c) || Character.isDigit(c)) {
    characterList.add(c);
    }
    }
    return characterList;
    }