美文网首页
LeetCode学习计划:LeetCode 75-Level-2

LeetCode学习计划:LeetCode 75-Level-2

作者: alex很累 | 来源:发表于2022-07-26 22:24 被阅读0次

14. 最长公共前缀

问题描述

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

示例

示例1
输入:strs = ["flower","flow","flight"]
输出:"fl"

示例2
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

解题思路

遍历一遍结束。

代码示例(JAVA)

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs.length == 1) {
            return strs[0];
        }
        Integer result = null;
        char[] arr1 = strs[0].toCharArray();
        for (int i = 1; i <= strs.length - 1; i++) {
            int common = 0;
            char[] arr2 = strs[i].toCharArray();
            int j = 0;
            for (; j <= arr1.length - 1 && j <= arr2.length - 1; j++) {
                // 不同,结束
                if (arr1[j] != arr2[j]) {
                    break;
                }
                // 比之前得出的结果大,直接结束
                if (result != null && j + 1 >= result) {
                    break;
                }
            }
            result = result == null ? j + 1 : Math.min(result, j + 1);
        }
        return strs[0].substring(0, result - 1);
    }
}

43. 字符串相乘

问题描述

给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例

输入: num1 = "2", num2 = "3"
输出: "6

输入: num1 = "123", num2 = "456"
输出: "56088"

解题思路

数学题,模拟法开冲!

代码示例(JAVA)

class Solution {
    public String multiply(String num1, String num2) {
        if ("0".equals(num1) || "0".equals(num2)) {
            return "0";
        }
        String ans = "0";
        for (int i = num1.length() - 1; i >= 0; i--) {
            StringBuilder temp = new StringBuilder();
            // 补0
            for (int j = i; j < num1.length() - 1; j++) {
                temp.append(0);
            }
            // 乘法
            int cur = num1.charAt(i) - '0';
            int carry = 0;
            for (int j = num2.length() - 1; j >= 0; j--) {
                int k = num2.charAt(j) - '0';
                temp.append((cur * k + carry) % 10);
                carry = (cur * k + carry) / 10;
            }
            // 可能会多出一位
            if (carry != 0) {
                temp.append(carry);
            }

            // 加法
            ans = addByString(ans, temp.reverse().toString());
        }
        return ans;
    }

    public String addByString(String str1, String str2) {
        StringBuilder ans = new StringBuilder();
        int carry = 0;
        for (int i = 0; str1.length() - 1 - i >= 0 || str2.length() - 1 - i >= 0; i++) {
            int m = str1.length() - 1 - i >= 0 ? str1.charAt(str1.length() - 1 - i) - '0' : 0;
            int n = str2.length() - 1 - i >= 0 ? str2.charAt(str2.length() - 1 - i) - '0' : 0;
            ans.append((m + n + carry) % 10);
            carry = (m + n + carry) >= 10 ? 1 : 0;
        }
        if (carry != 0) {
            ans.append(1);
        }
        return ans.reverse().toString();
    }
}

相关文章

网友评论

      本文标题:LeetCode学习计划:LeetCode 75-Level-2

      本文链接:https://www.haomeiwen.com/subject/ugcmbrtx.html