字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = "leetcode"
输出: 0
示例 2:
输入: s = "loveleetcode"
输出: 2
示例 3:
输入: s = "aabb"
输出: -1
提示:
1 <= s.length <= 105
s 只包含小写字母
初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台
编辑
思路一:将对应位置的字符存放在对应的int类型的数组中并记录他出现的次数
编辑
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; } }
编辑
有效的字母异位词
初级算法 - 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方法比较数组内容是否相同
编辑
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
编辑
编辑
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; } }