金融AIGC研究
优质  高效     
优质的技术交付服务 迅捷的办事效率
我们专注品质与服务   决胜制高点  细节决定成败
Runoff commanding heights Detail decides success or failure
The commanding heights of
the details determine success or failure
技术动态
DETAIL
Leetcode 学习第一天
来源:互联网 | 作者:business-101 | 发布时间: 2024-03-14 | 279 次浏览 | 分享到:

https://datawhalechina.github.io/leetcode-notes/#/ch07/07.01/07.01.01-Exercises

总共有11题, 051-062

前三题做起来,比较顺手, 是关于字符串的基本处理

1.003无重复最长子串,主要设置了从最左到碰到 重复字符时的处理逻辑,就可以了


2.最长回文子串,遍历来得到结果


3.字符串转整数, 处理好正负, 处理好最大值就可以完成


后三题,处理了两道

4.反转, 用了split函数

5. (缺)相乘

6.最长公共前缀,取第一个字串的前缀来进行遍历比较


二叉树的做了两题

7. 前序遍历, 做好 回归算法

8. 中序遍历,  做一个回归算法

9.(缺)层序遍历,

0003. 无重复字符的最长子串

class Solution {

    public int change(int[] kk,int i,int j,String s,int max){
        int k=i;
        for(;k<j;k++)if(s.charAt(k)==s.charAt(j))break;
        for(int x=i;x<=k;x++)kk[s.charAt(x)]--;
        return k+1;
    }

    public int lengthOfLongestSubstring(String s) {
        int max=0;
        int[] kk=new int[256];
        for(int i=0;i<s.length();i++){
            kk[s.charAt(i)]++;
            for(int j=i+1;j<s.length();j++){
            if(kk[s.charAt(j)]==0)kk[s.charAt(j)]++;
            else{
                System.out.println("before:"+i+":"+j+":"+max);
                if(max<j-i)max=j-i;
                i=change(kk,i,j,s,max);
                kk[s.charAt(j)]++;
                System.out.println("after:"+i+":"+j+":"+max);
            }
            }
            if(s.length()-i>max)max=s.length()-i;
            break;

        }

        return max;
    }
}

https://leetcode.cn/problems/longest-palindromic-substring/description/



0005. 最长回文子串

class Solution {
    public String longestPalindrome(String s) {
        int max=0;
        String ret="";
        int k=0;
        boolean flag=true;
        for(int i=0;i<s.length();i++){
            for(int j=s.length()-1;j>=i;j--){
                k=0;flag=true;
                for(;k+i<=j-k;k++)if(s.charAt(k+i)!=s.charAt(j-k)){flag=false;break;}
                if(flag&&j-i+1>max){max=j-i+1;ret=s.substring(i,j+1);}
            }

        }
        return ret;
    }
}


3.0008. 字符串转换整数 (atoi)

class Solution {
    public int myAtoi(String s) {
        long tmp=0l;
        s=s.trim();
        boolean reg=false;
        int st=0;
        if(s.length()<1)return 0;
        if(s.charAt(0)=='-'){reg=true;st=1;}
        else if(s.charAt(0)=='+'){st=1;}
        else if(s.charAt(0)<'0'||s.charAt(0)>'9')return 0;
        int cnt=0;
        while(st<s.length()&&s.charAt(st)>='0'&&s.charAt(st)<='9'){
            tmp=tmp*10+(s.charAt(st)-'0');
            st++;
            if(tmp>0)cnt++;
            if(cnt==11)break;
        }
        if(reg)tmp=-1*tmp;
        return tmp>Integer.MAX_VALUE?Integer.MAX_VALUE:(tmp<Integer.MIN_VALUE?Integer.MIN_VALUE:(int)tmp);
    }
}



.0151. 反转字符串中的单词

class Solution {
    public String reverseWords(String s) {
            String[] tmp=s.trim().split("s");
            StringBuilder sb=new StringBuilder(tmp[tmp.length-1]);
            for(int i=tmp.length-2;i>=0;i--)if(tmp[i].trim().length()>0)sb.append(" "+tmp[i]);
            return sb.toString();
    }
}



3.0014. 最长公共前缀

class Solution {
    public String longestCommonPrefix(String[] strs) {
        String ret="";
        boolean flag=true;
        if(strs[0].length()<1)return "";
        String tmp=strs[0].substring(0,1);
        for(int i=1;i<=strs[0].length();i++){
            tmp=strs[0].substring(0,i);
            flag=true;
            for(int j=1;j<strs.length;j++)if(strs[j].length()<i||!strs[j].startsWith(tmp)){flag=false;break;}
            if(!flag){ret=strs[0].substring(0,i-1);break;}
            else ret=tmp;


        }
        return ret;
    }
}

1.0144. 二叉树的前序遍历

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public void doChild(List<Integer> ret,TreeNode ll,TreeNode rr){
        if(ll!=null){ret.add(ll.val);doChild(ret,ll.left,ll.right);}
        if(rr!=null){ret.add(rr.val);doChild(ret,rr.left,rr.right);}
    }
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> ret=new ArrayList<>();
        if(root!=null){
        ret.add(root.val);
        doChild(ret,root.left,root.right);
       
        }
        return ret;
    }
}

2.0094. 二叉树的中序遍历

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public void doChild(List<Integer> ret,TreeNode root){
        if(root!=null){
            doChild(ret,root.left);
            ret.add(root.val);
            doChild(ret,root.right);
        }
    }
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> ret=new ArrayList<>();
        if(root!=null){
            doChild(ret,root.left);
            ret.add(root.val);
            doChild(ret,root.right);
        }



        return ret;
    }
}