算法(七)

1、给定一个字符串,请你找出其中不含有重复字符的最长子串的长度(无重复字符的最长子串)

代码如下:

public int lengthOfLongestSubstring(String s){

         int n = s.length();

         int ans = 0;

         for(int i=0; i<n; i++){

                  for(int j=i+1; j<=n; j++){

                           if(allUnique(s, i, j)){

                                 ans=Math.max(ans, j-i);

                           }

                  }

         }

         return ans;

}

public boolean allUnique(String s, int start, int end){

        Set<Character> set = new HashSet<>();

        for(int i=start; i<end; i++){

                 Character ch = s.charAt(i);

                 if(set.contains(ch)){

                          return false;

                 }

                 set.add(ch);

        }

        return true;

}

2、操作给定的二叉树,将其变换为源二叉树的镜像。

    解法1:

    /**
     * 递归实现
     * 关键就在于把大问题转化为子问题即可
     * @param root
     */
    public static void Mirror1(TreeNode root) {
        if(root != null) {
            TreeNode temp = root.left;
            root.left = root.right;
            root.right = temp;
            Mirror1(root.left);
            Mirror1(root.right);
        }
    }

    解法2:

    /**
     * 非递归实现, 借助栈或者列表遍历树中每一个非叶子节点
     * 交换其左右子树即可
     * @param root
     */
    public static void Mirror2(TreeNode root) {
        if(root == null) {
            return;
        }
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);
        while(!stack.isEmpty()) {
            TreeNode node = stack.pop();
            TreeNode temp = node.left;
            node.left = node.right;
            node.right = temp;
            if(node.left != null) {
                stack.push(node.left);
            }
            if(node.right != null) {
                stack.push(node.right);
            }
        }
    }

算法 文章被收录于专栏

根据自己所见所闻进行算法归纳总结

全部评论

相关推荐

点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务