每日两道算法题 - 字符串中第一个唯一字符(高频)
2021-12-18 本文已影响0人
辉_ace
问题
给定一个字符串,获取该字符串中第一个唯一字符,如果不存在,则返回-1。
思路
第一种解法:
利用哈希表,key为字符,value为出现的次数(初始值为1)。
遍历字符串中每一个字符并放入哈希表,如果出现多次,则该字符对应的值自增。
遍历每一个字符,判断字符对应value是否等于1,如果等于1,则返回该字符的下标。如果遍历完仍不满足条件,则返回-1。
第二种解法:
利用javaApi。
charAt(index) : 根据下标获取对应字符。
indexOf(char) : 获取字符第一个下标
lastIndexOf(char) : 获取字符最后一个下标
如果字符的两个下标相等,则代表为第一次出现
实现
第一种解法:哈希表
//获取字符串中第一个不重复的字符,并返回其下标
public class FirstUniqChar {
public static void main(String[] args) {
String s = "hello";
int index = firstUniqCharForHash(s);
System.out.println(index);
}
private static int firstUniqCharForHash(String string) {
/**
* 利用hashmap
* 遍历字符串中每一个字符, 并添加到map中,key为该字符,value为出现的次数
* 遍历字符,从map中获取,如果某个字符在map中的值 不等于 0 ,则返回该字符下标
*/
char[] chars = string.toCharArray();
Map<Character,Integer> map = new HashMap<>();
for (char c : chars) {
map.put(c,map.getOrDefault(c,0)+1);
}
for (int i=0;i<chars.length;i++){
if (map.get(chars[i]) == 1){
return i;
}
}
return -1;
}
}
image.png
第二种解法:javaApi
public class FirstUniqChar {
public static void main(String[] args) {
String s = "hello";
int index = firstUniqCharForApi(s);
System.out.println(index);
}
private static int firstUniqCharForApi(String s) {
char[] chars = s.toCharArray();
for (int i=0;i<chars.length;i++){
if (s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))){
return i;
}
}
return -1;
}
}
image.png