恋上数据结构与算法第三季课堂笔记05

1.面试题01.09.:字符串轮转

标签:字符串、字符串匹配

思想:通过s1+s1获得一个字符串,判断s2是否是s1的子串即可。

代码:

  public boolean isFlipedString(String s1, String s2) {
        if(s1 == null || s2 == null) return false;
        if(s1.length() != s2.length()) return false;
        return (s1+s1).contains(s2);

    }

2._572另一个树的子树

标签:树、字符串匹配、树的序列化

思路:本题采用树的序列化思想来解决

           首先对树按照前序、中序或后续的方式进行序列化。(前序有坑,需注意避开)序列化成字符串后,比较字符串是否包含即可。

代码:

    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if(root == null || subRoot == null) return false;
        return postSerialized(root).contains(postSerialized(subRoot));
    }
    private String postSerialized(TreeNode node){
        StringBuilder sb = new StringBuilder();
        postSerialized(node,sb);
        //StringBuilder类型转换成String类型
        return sb.toString();
    }
    private void postSerialized(TreeNode node,StringBuilder s){
        if(node.left == null){
            s.append("#!");
        }else{
            postSerialized(node.left,s);
        }
        if(node.right == null){
            s.append("#!");
        }else{
            postSerialized(node.right,s);
        }
        s.append(node.val).append("!");
    }

3._242_有效的字母异位词

标签:哈希表、字符串、排序

思路:1.可以用哈希表来解决此问题,但是哈希表应用到此问题上有点重。本题可以参照哈希表的思想。

           2.存储一个能存放26位字母的哈希表,哈希表的value代表字母出现的次数。

           3.同时遍历s和t两个字符串,s字符串出现的字符,在对应位置++,t字符串出现的字符,                    则--;

代码:

    public boolean isAnagram(String s, String t) {
        if(s == null || t == null) return false;
        char[] s1 = s.toCharArray();
        char[] t1 = t.toCharArray();
        if(s1.length != t1.length) return false;
        int[] counts = new int[26];
        for(int i = 0;i < s1.length;i++){
            counts[s1[i] - 'a']++;
        }
        for(int i = 0;i<s1.length;i++){
            if(--counts[t1[i] - 'a'] < 0) return false;
        }
        return true;


    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值