力扣每日一练之字符串Day6

举报
京与旧铺 发表于 2022/05/27 19:55:34 2022/05/27
【摘要】 力扣每日一练之字符串Day6🍕前面的话🥞大家好!本篇文章将介绍2周搞定数据结构的题,本文将以三道题作为背景,介绍经典的数独以及排序算法,展示语言为java(博主学习语言为java)。今天呢,是博主开始刷力扣的第五天,如果有想要开始准备自己的算法面试的同学,可以跟着我的脚步一起,共同进步。大家都是并肩作战的伙伴,一起努力奋力前行,路漫漫其修远兮,吾将上下而求索,相信我们一定都可以拿到自己期...

力扣每日一练之字符串Day6

🍕前面的话🥞

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

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

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

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

😘系列专栏:java学习

💻首发时间:🎞2022年5月10日🎠

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

🔏参考在线编程网站:🎧力扣

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

🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲

🏓导航小助手📻



图片


🍶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的增强循环,复习了数组和循环的知识,那么呢,期待一下下一篇文章吧,和我一起进步,每天努力多一些,迈出更大的一步


觉得文章写的不错的亲亲,点赞评论关注走一波,爱你们哦🛴

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。