力扣每日一练之字符串Day6

力扣每日一练之字符串Day6

前面的话

大家好!本篇文章将介绍2周搞定数据结构的题,本文将以三道题作为背景,介绍经典的数独以及排序算法,展示语言为java(博主学习语言为java)。今天呢,是博主开始刷力扣的第五天,如果有想要开始准备自己的算法面试的同学,可以跟着我的脚步一起,共同进步。大家都是并肩作战的伙伴,一起努力奋力前行,路漫漫其修远兮,吾将上下而求索,相信我们一定都可以拿到自己期望的offer,冲冲冲!

‍博客主页:京与旧铺的博客主页

✨欢迎关注点赞收藏⭐留言✒

本文由京与旧铺原创,csdn首发!

系列专栏:java学习

首发时间:2022年5月10日

你做三四月的事,八九月就会有答案,一起加油吧

参考在线编程网站:力扣

如果觉得博主的文章还不错的话,请三连支持一下博主哦

最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲
推荐一款模拟面试、刷题神器点击进入网站

导航小助手

文章目录

  • 力扣每日一练之字符串Day6
    • @[toc]
  • LeetCode 387.字符串中的第一个唯一的字符
  • 解题思路
  • 源代码
  • LeetCode383.赎金信
  • 解题思路
  • 源代码
  • Leetcode242.有效的字母异位词
  • 解题思路
  • 源代码


LeetCode 387.字符串中的第一个唯一的字符

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

示例 1:

输入: s = "leetcode"
输出: 0
示例 2:

输入: s = "loveleetcode"
输出: 2
示例 3:

输入: s = "aabb"
输出: -1

解题思路

遍历字符串如果当前字符的第一个索引和最后一个索引不是同一个则继续遍历,是同一个返回即可。

源代码

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;
    }
}

LeetCode383.赎金信

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。

如果可以,返回 true ;否则返回 false 。

magazine 中的每个字符只能在 ransomNote 中使用一次。

示例 1:

输入:ransomNote = "a", magazine = "b"
输出:false
示例 2:

输入:ransomNote = "aa", magazine = "ab"
输出:false
示例 3:

输入:ransomNote = "aa", magazine = "aab"
输出:true

解题思路

今天这道题的意思是:检查 ransomNote 中的所有字符是不是都在 magazine 中,且 magazine 中的每个字符只能使用一次,那么,我们可以直接先统计出来 magazine 中所有字符的频率,再遍历 ransomNote,每遍历一个字符从词频表中减去一个这个字符的数量,直到不够减了,即可返回 false,否则,返回 true。

源代码

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
         int [] count=new int[26];
         for(char m:magazine.toCharArray()){
             count[m-'a']++;
         }
         for(char r:ransomNote.toCharArray()){
             if(count[r-'a']<=0)return false;
             count[r-'a']--;
         }
         return true;
    }
}

Leetcode242.有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true
示例 2:

输入: s = "rat", t = "car"
输出: false

解题思路

排序
tt 是 ss 的异位词等价于「两个字符串排序后相等」。因此我们可以对字符串 ss 和 tt 分别排序,看排序后的字符串是否相等即可判断。此外,如果 ss 和 tt 的长度不同,tt 必然不是 ss 的异位词。

源代码

class Solution {
    public boolean isAnagram(String s, String t) {
         if(s.length()!=t.length()){
             return false;
         }
         char[] str1=s.toCharArray();
         char[] str2=t.toCharArray();
         Arrays.sort(str1);
         Arrays.sort(str2);
         return Arrays.equals(str1,str2);
    }
}

# 总结

通过这三道题,我们学习了for的增强循环,复习了数组和循环的知识,那么呢,期待一下下一篇文章吧,和我一起进步,每天努力多一些,迈出更大的一步

------

## 觉得文章写的不错的亲亲,点赞评论关注走一波,爱你们哦
结束语
推荐一款模拟面试、刷题神器网站
点击跳转进入网站[点击进入](https://www.nowcoder.com/exam/oj?page=1&tab=%E8%AF%AD%E6%B3%95%E7%AF%87&topicId=220&fromPut=pc_csdncpt_jyjp_java)
1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
2、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
3、大厂笔试真题:字节跳动、美团、百度、腾讯…

你可能感兴趣的:(LeetCode刷起来,leetcode,java,算法)