【剑指offer】50. 第一个只出现一次的字符

题目描述

在这里插入图片描述
在这里插入图片描述


// 力扣
// 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个
// 单空格。 s 只包含小写字母。

// 牛客
// 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个
// 只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大
// 小写).(从0开始计数)

题解

/ 出现次数记录 /

// 力扣
// 执行用时:37 ms, 在所有 Java 提交中击败了16.73%的用户
// 内存消耗:38.9 MB, 在所有 Java 提交中击败了30.90%的用户
import java.util.HashMap;
class Solution {
    public char firstUniqChar(String s) {
        char[] strs = s.toCharArray();
		// 构建HashMap用于存储
		// key:strs中出现的字符,value:字符出现次数
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        for (char str: strs) {
            if (!map.containsKey(str))
				map.put(str, 1);  // 没出现过,置1
            else 
                map.put(str, map.get(str)+1);  // 出现过,value+1
        }
		for (char key: strs) {
			if (map.get(key) == 1)  // 按照strs的顺序,逐个检查map对应的value
				return key;  // 第一个出现1的,返回字符
		}
        return ' ';
    }
}


// 牛客
// 运行时间:25ms,超过77.83%用Java提交的代码
// 占用内存:10112KB,超过9.32%用Java提交的代码
import java.util.HashMap;
public class Solution {
    public int FirstNotRepeatingChar(String str) {
        HashMap<Character, Integer> map = new HashMap<>();
        char[] strs = str.toCharArray();
        for (char s: strs) {
            if (!map.containsKey(s))
                map.put(s, 1);
            else {
                map.put(s, map.get(s) + 1);
            }
        }
        for (int i = 0; i < strs.length; i++) {
            if (map.get(strs[i]) == 1)
                return i;
        }
        return -1;
    }
}
// 出现状态记录 ///


// 力扣
import java.util.HashMap;
class Solution {
    public char firstUniqChar(String s) {
		// 将s转为字符组char[] strs
        char[] strs = s.toCharArray();
		// 构建HashMap用于存储
		// key:strs中出现的字符,value:字符是否出现次数小于2次(是则true)
        HashMap<Character, Boolean> map = new HashMap<Character, Boolean>();
        for (char str: strs) {
            if (!map.containsKey(str))  // 如果遍历字符str是第1次出现
				map.put(str, true);  // 将str对应的value置为true
            else 
                map.put(str, false);  // 如果出现次数大于等于2次,false
        }
		for (char key: strs) {
			if (map.get(key))  // 按照strs的顺序,逐个检查map对应的value
				return key;  // 第一个出现true的,返回字符
		}
        return ' ';
    }
}



// 牛客
// 运行时间:28ms,超过69.39%用Java提交的代码
// 占用内存:10116KB,超过9.24%用Java提交的代码
import java.util.HashMap;
public class Solution {
    public int FirstNotRepeatingChar(String str) {
        HashMap<Character, Boolean> map = new HashMap<Character, Boolean>();
        char[] strs = str.toCharArray();
        for (char s: strs) {
            if (!map.containsKey(s))
                map.put(s, true);
            else {
                map.put(s, false);
            }
        }
        for (int i = 0; i < strs.length; i++) {
            if (map.get(strs[i]))
                return i;
        }
        return -1;
    }
}

猜你喜欢

转载自blog.csdn.net/fisherish/article/details/113775422