[LeetCode]--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.

用数组,简单粗暴,把字符个数都记录下来,最后遍历一下原来的字符串,判断再这个数组里面的个数就行。

public int firstUniqChar1(String s) {
        if (s == null || s.length() == 0)
            return -1;
        int[] count = new int[256];

        for (int i = 0; i < s.length(); i++) {
            int index = s.charAt(i) - 'a';
            count[index]++;
        }

        for (int i = 0; i < s.length(); i++) {
            int index = s.charAt(i) - 'a';
            if (count[index] == 1)
                return i;
        }
        return -1;
    }

利用Map来记录。

public int firstUniqChar(String s) {
        if (s == null || s.length() == 0) {
            return -1;
        }

        HashMap<Character, Integer> hashmap = new HashMap<Character, Integer>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (hashmap.containsKey(c)) {
                hashmap.put(c, hashmap.get(c) + 1);
            } else {
                hashmap.put(c, 1);
            }
        }

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (hashmap.get(c) == 1) {
                return i;
            }
        }
        return -1;
    }

利用一个List一个Map来记录。用更多的空间来换取时间。

public int firstUniqChar(String s) {
            char[] cs=s.toCharArray();
            List<Character> list=new ArrayList<Character>();
            Map<Character,Integer> map=new HashMap<Character,Integer>();
            for (int i = 0; i < cs.length; i++) {
                Character c=cs[i];
                if (map.containsKey(c)) {
                    list.remove(c);
                }else{
                    list.add(c);
                    map.put(c,i);
                }
            }
            return list.size()==0?-1:map.get(list.get(0));
        }  
时间: 2024-10-23 02:12:55

[LeetCode]--387. First Unique Character in a String的相关文章

php iconv() : Detected an illegal character in input string

开始是这样用的$str = iconv('UTF-8', 'GB2312', unescape(isset($_GET['str'])? $_GET['str']:''));上线后报一堆这样的错:iconv() : Detected an illegal character in input string 考虑到GB2312字符集比较小,换个大的吧,于是改成GBK:$str = iconv('UTF-8', 'GBK', unescape(isset($_GET['str'])? $_GET['

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能

[LeetCode]10.Regular Expression Matching

题目 mplement regular expression matching with support for '.' and '*'. '.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire input string (not partial). The function prototype should

Java String源码解析

public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0 /**

[LeetCode] Delete Operation for Two Strings 两个字符串的删除操作

Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 the same, where in each step you can delete one character in either string. Example 1: Input: "sea", "eat" Output: 2 Explanation: You ne

转 深入解析String#intern

引言 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String.这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念.常量池就类似一个JAVA系统级别提供的缓存. 8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊.它的主要使用方法有两种: 直接使用双引号声明出来的String对象会直接存储在常量池中. 如果不是用双引号声明的String对象,可以使用String提供的intern方法.intern 方法会从字符串常量池中查询当前字符串是否存在

String类使用的例子(3)

if ("first"==strFL) Console.WriteLine("The index value returned is : "+ objString.str.IndexOfAny(c,intStart)); else Console.WriteLine("The index value returned is : "+ objString.str.LastIndexOfAny(c,intStart)); break; case 3:

从string对象中去掉标点符号

编一个程序,从string 对象中去掉标点符号.要求输入到程序的字符串必须含有标点 符号,输出结果则是去掉标点符号后的string 对象. 消除标点 #include <iostream> #include <string> #include <cctype> using namespace std; int main() { string s, result_str; bool has_punct = false; //用于标记字符串中有无标点 char ch; //

深入解析String#intern

[本文转自深入解析String#intern] 引言 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String.这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念.常量池就类似一个JAVA系统级别提供的缓存. 8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊.它的主要使用方法有两种: 直接使用双引号声明出来的String对象会直接存储在常量池中. 如果不是用双引号声明的String对象,可以使用String提供的intern方法.inter