字符串中的第一个唯一字符&&有效的字母异位词(多思路)

简介: 字符串中的第一个唯一字符&&有效的字母异位词(多思路)

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


给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。

示例 1:

输入: s = "leetcode"

输出: 0

示例 2:

输入: s = "loveleetcode"

输出: 2

示例 3:

输入: s = "aabb"

输出: -1

提示:

1 <= s.length <= 105

s 只包含小写字母

初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台

image.png

编辑

思路一:将对应位置的字符存放在对应的int类型的数组中并记录他出现的次数


image.png

编辑

class Solution {
    public int firstUniqChar(String s) {
        //一共26个字符创建26个元素的大小就好
        int[] count=new int[26];
        char[] toChar=s.toCharArray();
        for(int i=0;i<s.length();i++) {          
            count[toChar[i]-'a']++;
        }
        for(int i=0;i<s.length();i++) {
            if(count[toChar[i]-'a']==1) {
                return i;
            }
        }
            return -1;
    }
}

image.png

编辑

有效的字母异位词


初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台

给定两个字符串 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 仅包含小写字母

进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

思路一:(先排序在比较)将两个字符串转化成数组进行排序,然后在使用equals方法比较数组内容是否相同


image.png

编辑

class Solution {
    public boolean isAnagram(String s, String t) {
        char[] sChar=s.toCharArray();
        char[] tChar=t.toCharArray();
        Arrays.sort(sChar);
        Arrays.sort(tChar);
        return Arrays.equals(sChar,tChar);
    }
}

思路二:用一个int数组统计一个字符串中每一个字符出现的次数,然后遍历另一个字符串,每次扫描到一个字符就让其在int数组出现的次数减一。如果全部遍历完成就算是完全匹配,如果期间出现一个字符匹配出现次数为0说明两个字符串不同返回flase


image.png

编辑

image.png

编辑

class Solution {
    public boolean isAnagram(String s, String t) {
        int sLength=s.length();
        int tLength=t.length();
        if(sLength!=tLength) return false;
        char[] sChar=s.toCharArray();
        char[] tChar=t.toCharArray();
        int[] recorderArr=new int[26];
        for(int i=0;i<sLength;i++) {
            recorderArr[sChar[i]-'a']++;
        }
        char temp;
        for(int i=0;i<tLength;i++) {
            temp=tChar[i];
            //如果出现次数为0就代表失败比如”ab“和”bb“,一个字符出现的次数是固定的减完了肯定是0如果 再出现匹配肯定是字符串不相同
            if(recorderArr[temp-'a']==0) {
                return false;
            }else {
                recorderArr[temp-'a']--;
            }
        }
        return true;
    }
}


相关文章
|
索引
【LeetCode】917. 仅仅反转字母、387. 字符串中的第一个唯一字符
目录 917. 仅仅反转字母 387. 字符串中的第一个唯一字符
48 0
|
6月前
|
存储 索引
LeetCode 387. 字符串中的第一个唯一字符
LeetCode 387. 字符串中的第一个唯一字符
39 0
|
3月前
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
|
6月前
|
机器学习/深度学习 索引
【力扣】387. 字符串中的第一个唯一字符
【力扣】387. 字符串中的第一个唯一字符
|
6月前
|
算法
leetcode:387. 字符串中的第一个唯一字符
leetcode:387. 字符串中的第一个唯一字符
29 0
|
6月前
|
索引
leetcode-438:找到字符串中所有字母异位词
leetcode-438:找到字符串中所有字母异位词
39 0
|
6月前
|
C++ 索引
字符串中的第一个唯一字符(C++)
字符串中的第一个唯一字符(C++)
60 0
|
算法
【算法专题突破】滑动窗口 - 找到字符串中所有字母异位词(14)
【算法专题突破】滑动窗口 - 找到字符串中所有字母异位词(14)
39 0
剑指offer 51. 字符串中第一个只出现一次的字符
剑指offer 51. 字符串中第一个只出现一次的字符
66 0
|
索引
Leecode 3. 无重复字符的最长子串
Leecode 3. 无重复字符的最长子串
56 0