Java教程

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

本文主要是介绍恋上数据结构与算法第三季课堂笔记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;


    }

这篇关于恋上数据结构与算法第三季课堂笔记05的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!