JZ34 第一个只出现一次的字符
原题链接
描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
示例1
输入:"google"
返回值:4
思路
还没有学到map,所以用数组模拟,str中的字符做key,数组中的值做value,一边遍历后统计字符,然后再根据str中字符的顺序依次遍历,value为1的就是要的结果。当时这里没想明白,总是想用数组下标进行遍历,但这样就没办法满足题设中第一个
的要求,卡了很久。
解答
public static int FirstNotRepeatingChar(String str) {
int[] map = new int[128];
for (int i=0;i<str.length();i++)
++map[str.charAt(i)];
for (int i=0; i<str.length(); ++i) {//这里是没想到的,直接用字符串进行遍历!!
if (map[str.charAt(i)] == 1)
return i;
}
return -1;
}
思路二
用 HashMap存储每一个字符。
解答二
import java.util.HashMap;
public class Solution {
public int FirstNotRepeatingChar(String str) {
HashMap<Character, Boolean> hashMap = new HashMap<>();
char[] chars = str.toCharArray();
for (char c : chars) {
hashMap.put(c, hashMap.containsKey(c));
}
for (int i = 0; i < chars.length; i++) {
if (!hashMap.get(chars[i])) return i;
}
return -1;
}
}
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15203072.html