LeetCode 003 字符串系列

Posted Al_tair

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 003 字符串系列相关的知识,希望对你有一定的参考价值。

字符串(二)

大家好!我是小笙!我们即将开始探索的是字符串(二)系列的题型,刷题一开始刷起来感觉很难,但是一直刷题一直爽,我们可以从中享受到刷题的快乐!加油!坚持下去

字符串(二)系列题型如下

字符的统计(387,242,49)

387题 字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = “leetcode”
返回 0
s = “loveleetcode”
返回 2
提示:你可以假定该字符串只包含小写字母。

方法一:暴力解法(MyCode)

对于这道题,我的想法是直接按题目要求,进行嵌套循环,寻找是否有重复的字符,方法暴力但不高效

class Solution {
    public int firstUniqChar(String s) {
        int n = s.length() - 1;
        Boolean flag = false; // 用来判断有无找到重复的字符
        for(int i=0;i<=n;i++){
            flag = false;
            for(int j=n;j>=0;j--){
                if(s.charAt(i) == s.charAt(j) && i != j){
                    flag = true;
                    break;
                }
            }
            if(flag == false){
                return i;
            }
        }
        return -1;
    }
}
执行用时:41 ms, 在所有 Java 提交中击败了12.88%的用户
内存消耗:38.5 MB, 在所有 Java 提交中击败了94.21%的用户

方法二:函数的运用(Other’sCode)

函数是精髓!

// 	int indexOf(String str, int fromIndex)  
// 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
// 	int lastIndexOf(int ch)
//  返回指定字符在此字符串中最后一次出现处的索引。
class Solution {
    public int firstUniqChar(String s) {
        for (int i = 0; i < s.length(); i++) {
            if (s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))) {
                return i;
            }
        }
        return -1;
    }
}

方法三:使用哈希表存储频数(Other’sCode)

官方解题思路
在第一次遍历时,我们使用哈希映射统计出字符串中每个字符出现的次数。在第二次遍历时,我们只要遍历到了一个只出现一次的字符,那么就返回它的索引,否则在遍历结束后返回 -1−1。

// put()	将键/值对添加到 hashMap 中
// getOrDefault()	获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
class Solution {
    public int firstUniqChar(String s) {
        Map<Character, Integer> frequency = new HashMap<Character, Integer>();
        for (int i = 0; i < s.length(); ++i) {
        	// 使用哈希映射统计出字符串中每个字符出现的次数
            char ch = s.charAt(i);
            frequency.put(ch, frequency.getOrDefault(ch, 0) + 1);
        }
        for (int i = 0; i < s.length(); ++i) {
            if (frequency.get(s.charAt(i)) == 1) {
                return i;
            }
        }
        return -1;
    }
}

242题 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram” 输出: true
示例 2:
输入: s = “rat”, t = “car” 输出: false
提示:
1 <= s.length, t.length <= 5 * 104 s 和 t 仅包含小写字母

以上是关于LeetCode 003 字符串系列的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 003 字符串系列

LeetCode刷题系列 - 003题Longest Substring Without Repeating Characters

003LeetCode--LongestSubstring

leetcode python 003

LeetCode-003-无重复字符的最长子串

LeetCode刷题--点滴记录003