🐣今日份鸡汤:
“不要忘记你曾希望变成怎样的大人”。
387. 字符串中的第一个唯一字符
难度简单632
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
📌解题思路:
利用哈希表,记录每个字符出现个数
遍历找出第一个次数为1的字符
👇Java&C++代码:
class Solution {
public int firstUniqChar(String s) {
Map<Character,Integer>map=new HashMap<>();
char []chars=s.toCharArray();
for(char ch:chars){
map.put(ch,map.getOrDefault(ch,0)+1);
}
for(int i=0;i<chars.length;i++){
if(map.get(chars[i])==1){
return i;
}
}
return -1;
}
}
class Solution {
public:
int firstUniqChar(string s) {
unordered_map<int,int>m;
for(char ch:s){
++m[ch];
}
for(int i=0;i<s.size();i++){
if(m[s[i]]==1){
return i;
}
}
return -1;
}
};
📢注意点:
哈希表键值对key与value分别对应数组里面的值与下标/索引。
for(int i:nums)简写遍历中,i是遍历每个nums数组中的值也就是key。
java中toCharArray()是指将字符串转存在char数组中。
java leng求长度,c++size求长度。
383. 赎金信
难度简单622
给你两个字符串: ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
📌解题思路;
首先判断ransomNote是不是比magazine短
然后统计magazine里面每个字符出现的次数
利用for循环遍历ransomNote消去相同的
如果导致某个字符为负,那么必然不是子串
👇Java&C++代码答案:
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
if(ransomNote.length()>magazine.length()){
return false;
}
int a[]=new int[26];
for(char i:magazine.toCharArray()){
a[i-'a']++;
}
for(char i:ransomNote.toCharArray()){
a[i-'a']--;
if(a[i-'a']<0){
return false;
}
}
return true;
}
}
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
if(ransomNote.size()>magazine.size()){
return false;
}
vector<int>a(26);
for(auto&i:magazine){
a[i-'a']++;
}
for(auto&i:ransomNote){
a[i-'a']--;
if(a[i-'a']<0){
return false;
}
}
return true;
}
};
📢注意点:
java必须使用toCharArray()将字符串转存入数组中才能用for循环接着统计字符串出现个数。
242. 有效的字母异位词
难度简单717
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
📌解题思路:
sort排序比较是否相同。
👇Java&C++代码答案:
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()){
return false;
}
char ch1[]=s.toCharArray();
char ch2[]=t.toCharArray();
Arrays.sort(ch1);
Arrays.sort(ch2);
return Arrays.equals(ch1,ch2);
}
}
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size()!=t.size()){
return false;
}
sort(s.begin(),s.end());
sort(t.begin(),t.end());
return s==t;
}
};
📢注意点:
java利用equal判断是否相等,c++则利用==符号自动判断是true还是false。
晚安。