给出一个字符串。找到字符串中第一个不重复的字符然后返回它的下标。如果不存在这样的字符,返回 -1。
分析:
类似于寻找整型数组中第一个单独出现的数字,对于单独出现的字符或者数字这类问题,可以借助HashMap集合,将数组或者字符串中的字符或者数字及对应的角标存到HashMap中,如果是重复的元素,其对应的value是最后一次出现的角标。遍历数组或者字符串,如果当前被遍历元素的角标和map集合中该元素对应的value相同,说明该元素的单独出现的,直接返回角标即可,如果不相同,那么说明该元素是重复的,需要将map集合中的value值改成该元素的当前角标,继续遍历,如果没有单独出现的字符或数字,就返回-1。
代码:
public class Solution {
/*
* @param s: a string
* @return: it's index
*/
public int firstUniqChar(String s) {
// write your code here
if(s == null || s.length() == 0) {
return -1;
}
//创建map集合,遍历字符串,将字符和角标存到map集合中
HashMap hm = new HashMap();
for(int i = 0; i < s.length(); i++) {
hm.put(s.charAt(i), i);
}
//遍历字符串,看当前字符的角标和map集合中该字符对应的value是否相同
//如果相同,说明就是单独出现的,直接返回该角标
//如果不同,说明有重复的字符出现,需要修改map集合中该字符对应的value值,继续遍历
for(int i = 0; i < s.length(); i++) {
if(i == hm.get(s.charAt(i))) {
return i;
}
hm.put(s.charAt(i), i);
}
return -1;
}
}