• 第四天


    无重复字符的最长子串

    • 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

    示例 1:

    • 输入: s = "abcabcbb"
    • 输出: 3
    • 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    class Solution {
        public int lengthOfLongestSubstring(String s) {
             Set<Character> occ = new HashSet<Character>();
             int answer=0;
             int rightFrontier=-1;
             for(int i = 0; i<s.length(); i++){
                 if(i!=0){//第一次,不需要删除窗口最左的位置
                     occ.remove(s.charAt(i-1));
                 }
                 while(rightFrontier<s.length()-1&&!occ.contains(s.charAt(rightFrontier+1))){
                     rightFrontier++;
                     occ.add(s.charAt(rightFrontier));//每次将所有的不重复串遍历结束
                 }
    
                answer = Math.max(rightFrontier-i+1,answer);//保留最大值
             }
             return answer;
        }
    }
    

    最长回文子串

    • 给你一个字符串 s,找到 s 中最长的回文子串。

    • 示例 1:
      输入:s = "babad"
      输出:"bab"
      解释:"aba" 同样是符合题意的答案。

    • 遇到困难以及点评
      对动归理解不透彻,不能及时想到。建议二刷

    • 代码

    class Solution {
        public String longestPalindrome(String s) {
    
            boolean[][] table = new boolean[s.length()][s.length()];
            String result = "";
            
            //遍历1
            for(int i=0;i<table.length;i++){
                table[i][i] = true;
                result = s.substring(i, i+1);
            }
    
            //遍历2
            for(int i = 0;i<table.length-1;i++){
                if(s.charAt(i)==s.charAt(i+1)){
                    table[i][i+1] = true;
                    result = s.substring(i, i + 2);
                }else{
                    table[i][i+1] = false;
                }
                result = s.substring(i, i+1);
            }
    
    
    
            // length > 2;
            for (int len = 2; len < table.length; len++) {
                for (int i = 0; i + len < table.length; i++) {
                    char front = s.charAt(i);
                    char end = s.charAt(i + len);
                    if (front == end) {
                        table[i][i + len] = table[i + 1][i + len - 1];
                    } else {
                        table[i][i + len] = false;
                    }
                    if(table[i][i + len]){
                        result = s.substring(i, i + len+1);//左闭右开
                    }
                }
            }
            return result;
        }
    }
    

    Java 小知识

    1.画出代码的内容结构

    String s1 = "hello";
    String s2 = "hello";
    String s3 = new String("hello");
    s1 += "world";
    

    image

    2.如何理解String 不可变性

    • 对数据修改均要在堆空间新造

    3.String 是否可被继承

    • 不可,因为声明为final

    4.String StringBuffer StringBuilder 三者对比

    1>String 具有不可变性,后两个均可变
    2>StringBuffer线程安全,效率比StringBuilder稍稍低,但是比String要高
    3>底层存储结构都是char[]

    5.String 常用方法

    length()/charAt()/equals()/startsWith()/endsWith()
    contains()/indexOf()

    6.String 转换 StringBuffer StringBuilder

    String->StringBuffer StringBuilder()两个差不多

    1.构造器

    String s="Hello";
    StringBuffer str=new StringBuffer(s);
    

    2.append

     String s="Hello";
     StringBuffer str=new StringBuffer();
     str.append(s)
    
    StringBuffer StringBuilder()两个差不多->String

    1.构造器

    StringBuffer str=new StringBuffer("java");
    String s=new String(str); 
    

    2.toString方法

    StringBuffer str=new StringBuffer("java");
    String s=str.toString();
    
  • 相关阅读:
    JS学习笔记-OO疑问之对象创建
    文件系统类型:
    Swift 编程语言新手教程
    数组长度计算
    tomcat配置文件server.xml具体解释
    openGL点精灵PointSprite具体解释: 纹理映射,旋转,缩放,移动
    iOS安全攻防(三):使用Reveal分析他人app
    逍遥叹
    oracle存储过程实例
    Java爬虫
  • 原文地址:https://www.cnblogs.com/franksimon/p/14957880.html
Copyright © 2020-2023  润新知