版权声明:本文为博主原创文章,未经博主允许不得转载。 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所在的索引,导致效率不高。