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. 字符串相乘
问题描述
给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 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();
}
}
网友评论