一、示例
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
二、说明
- num1 和 num2 的长度小于110。
- num1 和 num2 只包含数字 0-9。
- num1 和 num2 均不以零开头,除非是数字 0 本身。
- 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
三、解题思路
这种方法背后的想法是,只有当两个字符串包含相同次数的相同字符时,一个字符串才是另一个字符串的排列。只有 sorted(x)= sorted(y) 时,一个字符串 x 才是其他字符串 y 的排列。
为了检查这一点,我们可以对两个字符串进行排序并进行比较。我们对短字符串 s1 和 s2 的所有子字符串进行排序,对它们进行排序并将它们与排序的 s1 字符串进行比较。如果两者完全匹配,s1 的排列是 s2 的子字符串,否则不是。
时间复杂度:O(nlog(n))
四、Demo
class Solution {
public static void main(String[] args) {
String s1 = "ab";
String s2 = "eidbaooo";
System.out.println(Solution.checkInclusion(s1, s2));
}
public static boolean checkInclusion(String s1, String s2) {
s1 = sort(s1);
for (int i = 0; i <= s2.length() - s1.length(); i++) {
if (s1.equals(sort(s2.substring(i, i + s1.length())))) {
return true;
}
}
return false;
}
public static String sort(String s) {
char[] c = s.toCharArray();
Arrays.sort(c);
return new String(c);
}
}