每日算法&面试题,大厂特训二十八天——第十五天(字符串)

Posted 肥学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日算法&面试题,大厂特训二十八天——第十五天(字符串)相关的知识,希望对你有一定的参考价值。


本文来源于算法面试题特训专栏,这里有大量专业性的算法题比如(动态规划21天,大厂特训28天等等)
欢迎大家一起学习。

链接:传送门

目录标题

导读

肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。上一期我们完成了动态规划二十一天现在我们进行下一项对各类算法进行二十八天的一个小总结。还在等什么快来一起肥学进行二十八天挑战吧!!

特别介绍

📣小白练手专栏,适合刚入手的新人或者考python二级的同学欢迎订阅编程小白进阶

📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏

📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们

📣这是个冲刺大厂面试专栏还有算法比赛练习我们一起加油 上岸之路

算法特训二十八天

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3
宫内只能出现一次。(请参考示例图)

注意:

一个有效的数独(部分已被填充)不一定是可解的。 只需要根据以上规则,验证已经填入的数字是否有
效即可。 空白格用 ‘.’ 表示。给你两个字符串: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

思路:题目要求使用字符串 \\textitmagazinemagazine 中的字符来构建新的字符串
\\textitransomNoteransomNote,且\\textitransomNoteransomNote
中的每个字符只能使用一次,只需要满足字符串 \\textitmagazinemagazine 中的每个英文字母
(\\texttt‘a’-‘z’)(’a’-’z’) 的统计次数都大于等于 \\textitransomNoteransomNote
中相同字母的统计次数即可。

class Solution 
    public boolean canConstruct(String ransomNote, String magazine) 
        if (ransomNote.length() > magazine.length()) 
            return false;
        
        int[] cnt = new int[26];
        for (char c : magazine.toCharArray()) 
            cnt[c - 'a']++;
        
        for (char c : ransomNote.toCharArray()) 
            cnt[c - 'a']--;
            if(cnt[c - 'a'] < 0) 
                return false;
            
        
        return true;
    



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

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

示例 1:

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

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

思路:t 是 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);
    



面试题

Redis 数据结构 压缩列表和跳跃表的区别
 压缩列表(ziplist)本质上就是一个字节数组,是 Redis 为了节约内存而设计的一种线性
数据结构,可以包含多个元素,每个元素可以是一个字节数组或一个整数。
30
 跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指
针,从而达到快速访问节点的目的。跳跃表支持平均 O(logN)、最坏 ON)复杂度
的节点查找,还可以通过顺序性操作来批量处理节点


Redis 主从同步是怎么实现的?
全量同步
master 服务器会开启一个后台进程用于将 redis 中的数据生成一个 rdb 文件,与此同时,
服务器会缓存所有接收到的来自客户端的写命令(包含增、删、改),当后台保存进程处理完
毕后,会将该 rdb 文件传递给 slave 服务器,而 slave 服务器会将 rdb 文件保存在磁盘并
通过读取该文件将数据加载到内存,在此之后 master 服务器会将在此期间缓存的
命令通过 redis 传输协议发送给 slave 服务器,然后 slave 服务器将这些命令依次作用于
自己本地的数据集上最终达到数据的一致性。


增量同步
从 redis 2.8 版本以前,并不支持部分同步,当主从服务器之间的连接断掉之后,master 服
务器和 slave 服务器之间都是进行全量数据同步。
从 redis 2.8 开始,即使主从连接中途断掉,也不需要进行全量同步,因为从这个版本开始
融入了部分同步的概念。部分同步的实现依赖于在 master 服务器内存中给每个 slave 服务
器维护了一份同步日志和同步标识,每个 slave 服务器在跟 master 服务器进行同步时都会
携带自己的同步标识和上次同步的最后位置。当主从连接断掉之后,slave 服务器隔断时间
(默认 1s)主动尝试和 master 服务器进行连接,如果从服务器携带的偏移量标识还在
master 服务器上的同步备份日志中,那么就从 slave 发送的偏移量开始继续上次的同步操
作,如果 slave 发送的偏移量已经不再 master 的同步备份日志中(可能由于主从之间断掉
的时间比较长或者在断掉的短暂时间内 master 服务器接收到大量的写操作),则必须进行
一次全量更新。在部分同步过程中,master 会将本地记录的同步备份日志中记录的指令依次
发送给 slave 服务器从而达到数据一致。


Redis 主从同步策略
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,
slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,
如不成功,要求从机进行全量同步。

点击直接资料领取

这里有python,Java学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。

以上是关于每日算法&面试题,大厂特训二十八天——第十五天(字符串)的主要内容,如果未能解决你的问题,请参考以下文章

每日算法&面试题,大厂特训二十八天——第十九天(树)

每日算法&面试题,大厂特训二十八天——第十七天(链表)

每日算法&面试题,大厂特训二十八天——第十二天(数组)

每日算法&面试题,大厂特训二十八天——第十五天(字符串)

每日算法&面试题,大厂特训二十八天——第二十八天(数组)

每日算法&面试题,大厂特训二十八天——第八天(递归|回溯)