LeetCode String专题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxccxzzxz/article/details/54879799

LeetCode String专题部分,更多说明请见LeetCode Array专题

344. 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) {
        if (s == null || s.length() == 0) {
            return "";
        }
        char[] chars = s.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int index = s.length() - 1; index >= 0; index--) {
            sb.append(chars[index]);
        }
        return sb.toString();
    }
}

问题分析

效率有待优化。

387. First Unique Character in a String

Given a string, find the first non-repeating character in it and return it’s index. If it doesn’t exist, return -1.

Examples:

s = "leetcode"
return 0.

s = "loveleetcode",
return 2.

Note: You may assume the string contain only lowercase letters.

译:给你一个字符串,找出其中第一个没有重复的字符并返回其索引。如果不存在这样的字符,返回 -1;

实现

public class Solution {
    public int firstUniqChar(String str) {
        if (str == null || str.length() <= 0) {
            return -1;
        }
        char[] charElements = str.toCharArray();
        LinkedHashMap<Character, Integer> boxMap = new LinkedHashMap<>();
        for (char element : charElements) {
            if (!boxMap.containsKey(element)) {
                boxMap.put(element, 1);
            } else boxMap.put(element, boxMap.get(element).intValue() + 1);
        }
        for (char key : boxMap.keySet()) {
            if (boxMap.get(key) <= 1 && boxMap.get(key) >= 0) {
                for (int index = 0; index < charElements.length; index++) {
                    if (charElements[index] == key) {
                        return index;
                    }
                }
            }
        }
        return -1;
    }
}

问题分析

在此我使用的是LinkedHashMap来进行元素的存储,因为有序,所以避免了顺序混乱的问题。在将字符串转换为char的数组后遍历一次将每个元素以键的形式对应的存在Map的Key中,如果已经存储过的元素则将其的值Value加一,默认为1。全部存储过后再进行Map的查找第一个值为1的Key则命中目标。接着我的实现还有待改善,因为套用了嵌套的for循环二次遍历char数组中该Key所在的索引,导致效率不高。

猜你喜欢

转载自blog.csdn.net/zxccxzzxz/article/details/54879799