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 = 0, right 
### LeetCode 编程练习 #### 面试 01.06. 字符串压缩 字符串压缩可以利用字符重复出现的次数来进行编码。如果某个字符连续出现了n次,则可以用该字符加上其出现次数来表示这段字符。例如,字符串`aabcccccaaa`会被压缩成`a2b1c5a3`。需要注意的是,只有当压缩后的字符串长度小于原始字符串时才返回压缩后的字符串;否则应返回原字符串。 对于这个问的一个解决方案如下所示[^1]: ```cpp string compressString(string S) { string res; for (int i = 0; i < S.size(); ++i) { int count = 1; while (i + 1 < S.size() && S[i] == S[i + 1]) { ++count; ++i; } res += string(1, S[i]) + to_string(count); } return res.size() < S.size() ? res : S; } ``` 此代码遍历输入字符串S中的每一个字符,并统计相邻相同字符的数量。之后将这些信息转换为所需的格式并存储在一个新的字符串res中。最后比较新旧字符串的大小决定返回哪一个。 #### 计算汉明距离 给定两个整数x和y,要计算两者间的汉明距离即二进制位不同位置的数量。下面是一个实现方法[^2]: ```cpp #include <iostream> using namespace std; class Solution { public: int hammingDistance(int x, int y) { int xorResult = x ^ y; // XOR operation finds differing bits. int distance = 0; while(xorResult != 0){ if ((xorResult & 1) == 1){ // Check the least significant bit. distance++; } xorResult >>= 1; // Shift right by one position. } return distance; } }; int main(){ Solution solu; int num = solu.hammingDistance(100, 123); cout << "The Hamming Distance is: " << num << endl; return 0; } ``` 上述程序通过异或运算找到两数值间不同的比特位,接着逐一遍历每一位判断是否相异从而得出最终的结果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值