leetcode刷题

学习目标:

提示:这里可以添加学习目标
leetcode刷题


最长公共前缀:

题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
解题思路:
横向比较:依次比较数组中的每一对字符串,找到它们的最长公共前缀。
纵向扫描:从左到右逐列比较所有字符串的字符,直到找到不同的字符。

public class Solution {
   
    public String longestCommonPrefix(String[] strs) {
   
        if (strs.length == 0) return "";
        String prefix = strs[0];
        for (int i = 1; i < strs.length; i++) {
   
            while (strs[i].indexOf(prefix) != 0) {
   
                prefix = prefix.substring(0, prefix.length() - 1);
                if (prefix.isEmpty()) return "";
            }
        }
        return prefix;
    }
}

合并两个有序数组

题目描述:
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
解题思路:
从后向前遍历两个数组,比较元素大小,将较大的元素放到 nums1 的末尾。
如果 nums2 中还有剩余元素,直接复制到 nums1 的前面。

    public int[] combineTwoList(int[] aList, int[] bList) {
   
        if (aList == null) {
   
            return bList;
        }
        if (bList == null) {
   
            return aList;
        }

        int a = aList.length - 1, b = bList.length - 1, c = a + b + 1;
        int[] result = new int[c + 1];
        while (a >= 0 && b >= 0) {
   
            if (aList[a] >= bList[b]) {
   
                result[c] = aList[a];
                a--;
            } else {
   
                result[c] = bList[b];
                b--;
            }
            c--;
        }
        while (b >= 0) {
   
            result[c] = bList[b];
            b--;
            c--;
        }
        return result;
    }

无重复字符的最长子串

题目描述:
给定一个字符串 s,请你找出其中不含有重复字符的最长子串的长度。
解题思路:
使用滑动窗口技术,维护一个窗口 [left, right],表示当前无重复字符的子串。
使用哈希表记录字符及其索引。
遍历字符串,如果当前字符已经在哈希表中,更新 left 指针;否则,更新哈希表和最大长度。

import java.util.HashMap;
import java.util.Map;

public class Solution {
   
    public int lengthOfLongestSubstring(String s) {
   
        Map<Character, Integer> map = new HashMap<>();
        int left = 0, maxLength = 0;
        for (int right = 0; right < s.length(); right++) {
   
            char c = s.charAt(right);
            if (map.containsKey(c)) {
   
                left = Math.max(left, map.get(c) + 1);
            }
            map.put(c, right);
            maxLength = Math.max(maxLength, right - left + 1);
        }
        return maxLength;
    }
}

回文数

题目描述:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
解题思路:
将整数转换为字符串。
检查字符串是否与其反转后的字符串相同。

public class Solution {
   
    public boolean isPalindrome(int x) {
   
        String s = String.valueOf(x);
        int left =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值