TfN+oOPi>j|VYRXFlduJ
zmAMP<+Ui$`FH!gmZ9D=MnDot~1f(#<6Wss#fiEHy{N417bg#tDxEQ6
z6;-KdS#3ex{)7_2thSaLL*cHzjl4Y=yNdXH_$#aCzCo?1yBbeFS*>K%F|>WQRv_t=
zBCGMzIBDplkl?fpED>2|>>f!zWaJ64CZm#emAUh{jdMstlO&G?NH2pKN=V@uvW&)9
n@f5T46n1^YKTTm5SThGLdB|v7m*1S=0*v_smI^kP!@T$hoY$GB
literal 0
HcmV?d00001
diff --git a/algorithm/leetcode/out/production/Java LeetCode/practice/N_15.class b/algorithm/leetcode/out/production/Java LeetCode/practice/N_15.class
new file mode 100644
index 0000000000000000000000000000000000000000..c77edaafc906904e1cda3e3abb3ae5c57f506c2f
GIT binary patch
literal 1437
zcma)6O>Y}j6g_V|GtYMHex#XcLz~hMLY>;!ZJ|z!LlCM2ij=fSu3DKO$i$vH(@e%;
zJg(F&%0FPiimFPHA|V!KmC%Z;5J>D;u|e!x35gX#RfRckoXAPZqGNg9yZ4@Z?tSMz
z%`g8x+5|9;cheZan8evMG>oN@M?vC^Gz=7#QBv-612~QI5*H-i6fh^ez>6jY61lM(
z0{WF!!xh*+?FH`D&eFUaUU%kwdIqOkb;rNqgr2guoO-n2wH10fbn1~;cS~14J%6zx
zkc<{W*R6Jz1cq|6Q)AP&ojXpc6M24V+G|HdB-$z{rr1H`giSYMZQs4c#R$FT0$1VD
z6?B$ZK$|5l;RM_s_&=2h1nk}I-Cf>par_1R#NM{=1kKV^5V=h^tW5GJkgY~eeR0NF
zjt?vGmc%iERMl$+PSgphNo9|ty*z)q+UkUL_kB;vn^M9Rl}Z_8kQF%8SM0qobnYtI
zBrax9#<;-2IJ&dx3@+hv25+OH2qrRk2OMg4*I=k#KkwT7ZMROD_w@^@8rzt7R&iyD
zuD4sEnv6OxFNwV4_#OA!Ey|wTp6$+FD4yxGdu*e**`DGtpjWiA$9)*i?HJ6JmhZDU
zuN72Oy@bi5?8_1IJ*w!S-b~x
z4L@7*9u6s!f4xz>ubkg1JDQ|puB=<8-Y6TEZW*iiB5&yg8pXMC(n^lp$8tecG=G3m
zOQ@s`nAMuDQ1Q-CShd@LTu1VIq%_=I(Z!0>ko|JDURb$oWNh?_#3C(
zHan@|OLE!#j=hTC$Y?{V>1<6-?T(V4-yQOfu!2VGcVcbM`vj3{(!JP8#!k_56WQk&
zlsGNAJXumAE%6#nh6Jz8;82(3eYa2#@EjkC;o*U2(7NR5hqtnxvB6R9HN4J(XX0J%
EKa?3XL;wH)
literal 0
HcmV?d00001
diff --git a/algorithm/leetcode/out/production/Java LeetCode/practice/N_18.class b/algorithm/leetcode/out/production/Java LeetCode/practice/N_18.class
new file mode 100644
index 0000000000000000000000000000000000000000..d1cf5a29a298228a9d96148e14ea0885f784d506
GIT binary patch
literal 1733
zcma)7O;2NG6n;*7KYA}6hGDps&UC(EEEHNtoiYldlSxc4$e1u0gDm9I7Pw4l$>o*=
z-Gb4TF>&EyGLmY-!iCI2K}Rvh#D#xAmu~$Dn#t7Xy)6Mo7Ph_bd){-N^PG?OwEgYL
z_j>?_aMMN`GA0IWM3AvDh^&d64IR&^!!@OTz74&2!NiLut_zG2ui^!xf@r$$u0Xq0
zEtUi)$Gu8vqP8?!^6$8_WokOds|B}w*Y!PhZYi~3!CO)2W#26XUZIqmc=y_kVSzbU
zt@)F+C4rNk9vkZ$UvyX9TrKd*xp8kLAVMpb<^q9?33T6^U!ZI)dBr=fKVPC8T~W@m
z$j2kNQd?r2$TZPLun%!7)OGxqS}KCX(RA0A_fsBv3O{oEx$IWvb7PgDG+*+ENBI_<
zm<-&)y*J(Euy_-B6X%%pq&Hu2gPPACjT~3&{|{hKvT23V>z?Yjr8=2aZHpt06N1wR
zExhUb?wabOiJ>@d;3dJS(0VxQI9|qZ93yx|5sb$1Dqdp|M{bJkJMgXvJz+jH!DdjGNy=fdt8?n;xbH$B~Kc?f6*9X@72
zlIcS?bE{e|GdZtX8CLP4Zn3CF>lmVUa0%*5pk5J(>K)g1o^srUyWYP8c^H~cay3Gw
zi4Mx~CIF|<$rF2yE|SnW`W9k}RDOAc$kYy^6PaIOW%kTE^ug`SUOtxDg%-_Qj^)IR
zVqNZM94ouQMVrZPxZL&DZm2!A@#zB?Te8|h(IrI1^wzGaov8Z?^@d|Tz-a|le8udh
zQeIcodE2oaI@RTBi^*N>fguq$`I|GL)N=c46)y
z_8qJU-d@*aU2inG6HRU{%*CQ*tMON8X?&nu`LN#2#u^=zh0*J1!sbHN%(^XGPkvvw
zxVnSeyjl(F>V2fRTD)4D7u}9-YEvA9GzVaUBM@)^KBDC_IQRhx{E27qH&G2FMaLQG
z#92uqB|ZEh$l$yz;DX%4MXBJDe2B|ZM~{4sUik)H@(3OBGy20ZTjnS=@GV&r(8#n+
z-UM{=eL?mF3^IO#Bqb9c%K*+$vdLY?SxS}~!`6r@DTQ-tY$=_mHG&vpUBE>|(Jf!`
z+mK*=mszJ8?xyVuZ9UYykIu*FG?`(8{I;n+SA}QVAmq&Uc0FcZ16R5mOswqyAhfE7
kWlTS%r<(d?GTz|7&LNj3Cr$rA=LgSH5n-zZeWBF9oUCN}&n}sHoTiQUt}1Vg;)vBz!DtAWDoG%2);=iPhHx%2bz>vsUxaZkqy^k}%G!-XCl
zVMOHAt3yYh#QNoQSxy5Qq7ojIhbtO}Gz<%PM(wQa#0A{p$gF^pSY5OP8Yk_nHC8C@3F#*k9n>91`qChA-xoobR
z(Ttf*N0Uz8&Zc9L#{#a@l7L8X*c=la3>5sIE8t5lnfat+rk)ElRR{&g&M+7u=5lAO
ztiZ|o`ZjWZYpmw4JsCZcB*DguM6H`6v*m@n;s6
zt&~#-Ror9?X+YYcoopeE^hm$PNmarV5gM$mo0)<&^Gu*MoQNDNp4?nvjS+f|cB_&y
zcJxUV5>Ty`oU>6*$!01!%VKw0!pCyU4dmxgpo=V#CAo8}Ih=!^->&?*KsOQK+{9Cq
ztKh2k?n8VoUk5pRDj=G9SWC*#3{N9d9YG`NKLg>GSVghJu~$^ld_<6I!ag^Pax
D5c=-m
literal 0
HcmV?d00001
diff --git a/algorithm/leetcode/out/production/Java LeetCode/practice/N_3.class b/algorithm/leetcode/out/production/Java LeetCode/practice/N_3.class
new file mode 100644
index 0000000000000000000000000000000000000000..88180468d02039734f19886fb3ebdb82e3e59e45
GIT binary patch
literal 1127
zcmZuvO-~b16g{sqoq_34zARt1Dj?W`P!&a`w2Dm(O$sb(FlwTiPKS1|AJ|UuBQb9H
z6S6chZrHd1)Wjd))_>zdJkx@u(V5JB@1FbKz31FJKYoAx4&Ww|8gxu*7{etMVGUB#
ziD;O@v=8IB?3x+Z%xZ|@ii)c$t_diMcG-3k0#Z1#E+8i>IZL2BZI`XpdMRsF9~jvp
zk-l`rG>Yp+)pq@3P<9G-O~9Ytsv4$an^tu7*<4IusA!e*PGM~$T`A|Snv5
z9lIFKSPmHsw9|dPbwYWv{pjMUQptkh%CM@j1T%DH9K(FRVr(_Es+d!8T|moJ>Q&Ra
zZ@WF|pxRkijgBt(b=<(bKyO1{gUYf|E0B)P`P@=*TgL)oIu;Svk#NluqYv4nd9
z`sp4D^t8IPmff^WrwwX0jwD;fScubXHoh@UHd8SvX^FTTPDPRe{jH>b#j>Z{MzLB}EkQcntyb@4?AMhlgyvM+>cRHZRxqWyKp?rbr!NY*e=!_eX
zPv8y@b}`Zhb@JqnEIu9m3~msy&PYa$njj1mdL+j+#AstTWqF(HJCakf7c{Y7>H7kS2mi9enu<39iZ
literal 0
HcmV?d00001
diff --git a/algorithm/leetcode/out/production/Java LeetCode/practice/N_33.class b/algorithm/leetcode/out/production/Java LeetCode/practice/N_33.class
new file mode 100644
index 0000000000000000000000000000000000000000..767719fd21c06cac93ec6468cc366f14c93aa166
GIT binary patch
literal 1694
zcmZuxT~ixX7=F%vWXWbJpNmjFgtoSUQc^)vfi}ffs!={FAd0b;O|qq1lT9YsIC$e#
zM~A=Qh0_mbxZ%cLKt~*YfPck*(5d2cHj$Po7kkco-tXsm&)L8J{o??@6=Y3xAZg%=
zfe)gX#FPmY(wBBWa#B(T-a(?qd_5AZ_4N1D^>*
zu6n)~qy*IX@T!1zvy^uQTIM|8U8ohaZe_*E7N}{TE9IQRs#EdgxuMj8`(9Ogmn%*#
z@N#Zq;qJu5G}9Cv&ll*5XXYL_-#dwd<8LIEgNo;GOv^ID!~FGv}5AujE$^%rUI$I+fgg3h_)jJIIlk{!EPRcOg>PV67(>Fs9eiuxu7!0tM1E{20@x-Yd|=M?)ZrYIp>a7rpDN$wuubn(1TBc
zXFXRaRoSXqs>!G$thafa8`C5Sbt*ai*VN2amQDqEN#p6^RSfYFcJMWWPnY0fbM4|O
z!Ci3INA@6or=Z|1u8~j~LpNos?tmVg<|&F^^wEpKVh}nE>hk+g*7l*UJ%hFfeGiej
zi@Pw|n|2YMA3aF*|7lKXYErlL{wJ_|G+Q6F_3`I07a!_k`|$65#Ok5eE}D}%V^2w^
z=V(bro}tx_?4nKfriQ(Zvm>CHfKIWK7QBsCoI@KfQ8UT?I^iu4;1YYxFd|1362}sn
zaDh@k2G}>dX5=9Ec3OsThA8{^e>zK@Ldz_34zS`m%-|iIhsK;;jF+()vJj^f!7$@b
zLph`&VqnC8!c`c!NKRj{_9*QdGhc!!9||SO+az@nTDC?GuJ!!_UES%^9-(za9qWAr
zL*0g^?5L?eEuYl-ZS5(tT-WtNQXjE(=@PN^9Vs&4G0ygeTW7D-Jb`8FGHx3@YU`af{8iauGj(#ONGeE&N?NY2
aWk%p1M1**WZZTwZzkseV{ypYW@cw_JJW;X$
literal 0
HcmV?d00001
diff --git a/algorithm/leetcode/out/production/Java LeetCode/practice/N_35.class b/algorithm/leetcode/out/production/Java LeetCode/practice/N_35.class
new file mode 100644
index 0000000000000000000000000000000000000000..0bd00832b19f24bcb070a4150bff187520499667
GIT binary patch
literal 568
zcmY*VO>fgc6r8np?KVxD66)}wrV+gTQT>{v{{R&*%@p0G3Jpu1&k|jk)
zz}?(B7LYH-eIrmiNHTLc9raB9R`*ge^@DM&(_@_{ww{x+7$y@teU|IENMaKnzT4h;
zB2b+eoyWr{o0zHka!tlD0f>TD3c>7AOmzymmZy8Rqb42scX
z6*3EE_4q5qm$L0MdL`*%fw=l_0E?)w5?Cr3yL`r(c2WiycH2pPL7-Bs(Y
zK()_N4V3N8Zhn-+XDpHEc4jwMfx1|4HQS%yH)rsgvU|bHTv!7eWmGiaV}-Fn`A0Oc
zNBMm$m&Q62Z{Q)T6~2cy<`ylgVYRd!;TF3N&nwi4?3141Hj%^{ck1wdV?l^t*bud!
Oa4OI3{|MM|(D(}i6kq@V
literal 0
HcmV?d00001
diff --git a/algorithm/leetcode/out/production/Java LeetCode/practice/easy/N_1122.class b/algorithm/leetcode/out/production/Java LeetCode/practice/easy/N_1122.class
new file mode 100644
index 0000000000000000000000000000000000000000..32a0b2113c8bcbaa674e689069a4c7b5a7709e4f
GIT binary patch
literal 2466
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
mG0R+|OGT<63Mo!J!DgCtJw}9oPY@G0-2FJ1 hm = new HashMap();
+ for (int i = 0; i < nums.length; ++i){
+ if (hm.containsKey(target - nums[i])) {
+ return new int[]{hm.get(target - nums[i]), i};
+ }
+ hm.put(nums[i], i);
+ }
+ return new int[0];
+ }
+}
diff --git a/algorithm/leetcode/src/practice/N_14.java b/algorithm/leetcode/src/practice/N_14.java
new file mode 100644
index 0000000..2af38cc
--- /dev/null
+++ b/algorithm/leetcode/src/practice/N_14.java
@@ -0,0 +1,17 @@
+package practice;
+
+public class N_14 {
+ public String longestCommonPrefix(String[] strs) {
+ if (strs.length == 1) return strs[0];
+ int strCount = strs.length;
+ int j = 0;
+ int min = strs[0].length();
+ for(int i = 0; i < strCount - 1; ++i){
+ j = 0;
+ while (strs[i].charAt(j) == strs[i + 1].charAt(j))
+ ++j;
+ min = Math.min(min, j);
+ }
+ return strs[0].substring(0, min);
+ }
+}
diff --git a/algorithm/leetcode/src/practice/N_15.java b/algorithm/leetcode/src/practice/N_15.java
new file mode 100644
index 0000000..e92e00c
--- /dev/null
+++ b/algorithm/leetcode/src/practice/N_15.java
@@ -0,0 +1,36 @@
+package practice;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class N_15 {
+ public List> threeSum(int[] nums) {
+ List> ans = new ArrayList<>();
+ if(nums == null || nums.length < 3) return ans;
+ int target;
+ int left, right;
+ Arrays.sort(nums);
+ int n = nums.length;
+ for (int i = 0; i < n - 2; i++) {
+ if (nums[i] > 0) break;
+ if (i > 0 && nums[i] == nums[i - 1]) continue;
+ target = -nums[i];
+ left = i + 1;
+ right = n - 1;
+ while(left < right){
+ int sum = nums[left] + nums[right];
+ if( sum== target){
+ ans.add(new ArrayList<>(Arrays.asList(nums[i], nums[left], nums[right])));
+ ++left;
+ --right;
+ while (left < right && nums[left] == nums[left - 1]) ++left;
+ while (left < right && nums[right] == nums[right - 1]) --right;
+ }else if(sum < target) ++left;
+ else --right;
+
+ }
+ }
+ return ans;
+ }
+}
diff --git a/algorithm/leetcode/src/practice/N_18.java b/algorithm/leetcode/src/practice/N_18.java
new file mode 100644
index 0000000..90893b9
--- /dev/null
+++ b/algorithm/leetcode/src/practice/N_18.java
@@ -0,0 +1,44 @@
+package practice;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class N_18 {
+ public List> fourSum(int[] nums, int target){
+ List> ans = new ArrayList<>();
+ if(nums == null || nums.length < 4) return ans;
+ int left,right;
+ int midTarget;
+ int sum;
+ int n = nums.length;
+ Arrays.sort(nums);
+ for (int i = 0; i < n - 3; i++) {
+ if((long)nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target) break;
+ if((long)nums[i] + nums[n - 3] + nums[n - 2] + nums[n - 1] < target) continue;
+ if(i > 0 && nums[i] == nums[i - 1]) continue;
+ for(int j = i + 1; j < n - 2; ++j){
+ if((long)nums[i] + nums[j] + nums[i + 1] + nums[i + 2] > target) break;
+ if((long)nums[i] + nums[j] + nums[n - 2] + nums[n - 1] < target) continue;
+ if(j > i + 1 && nums[j] == nums[j - 1]) continue;
+ left = j + 1;
+ right = n - 1;
+ midTarget = target - nums[i] - nums[j];
+ while (left < right){
+ sum = nums[left] + nums[right];
+ if(sum == midTarget){
+ ans.add(new ArrayList<>(Arrays.asList(nums[i], nums[j], nums[left], nums[right])));
+ ++left;
+ --right;
+ while (left < right && nums[left] == nums[left - 1]) ++left;
+ while (left < right && nums[right] == nums[right + 1]) --right;
+ }
+ else if(sum < midTarget) ++left;
+ else --right;
+ }
+ }
+
+ }
+ return ans;
+ }
+}
diff --git a/algorithm/leetcode/src/practice/N_20.java b/algorithm/leetcode/src/practice/N_20.java
new file mode 100644
index 0000000..50b75d7
--- /dev/null
+++ b/algorithm/leetcode/src/practice/N_20.java
@@ -0,0 +1,25 @@
+package practice;
+
+import java.util.Stack;
+
+public class N_20 {
+ public boolean isValid(String s) {
+ Stack charStack = new Stack<>();
+ int len = s.length();
+ for (int i = 0; i < len; ++i) {
+ char ch = s.charAt(i);
+ if(ch == '(' || ch == '[' || ch == '{' )
+ charStack.push(ch);
+ else {
+ if (charStack.empty()
+ || ch == ')' && charStack.peek() != '('
+ || ch == ']' && charStack.peek() != '['
+ || ch == '}' && charStack.peek() != '{')
+ return false;
+ else charStack.pop();
+ }
+ }
+ if(charStack.empty()) return true;
+ else return false;
+ }
+}
diff --git a/algorithm/leetcode/src/practice/N_3.java b/algorithm/leetcode/src/practice/N_3.java
new file mode 100644
index 0000000..5f30ec7
--- /dev/null
+++ b/algorithm/leetcode/src/practice/N_3.java
@@ -0,0 +1,25 @@
+package practice;
+
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class N_3 {
+ public int lengthOfLongestSubstring(String s) {
+ if(s.length() == 0) return 0;
+ int len = s.length();
+ int maxSize = 0;
+ int tail = 0;
+ Set hs = new HashSet();
+ for (int i = 0; i < len; ++i) {
+ if(i != 0)
+ hs.remove(s.charAt(i - 1));
+ while (tail < len && !hs.contains(s.charAt(tail))){
+ hs.add(s.charAt(tail));
+ ++tail;
+ }
+ maxSize = Math.max(maxSize, tail - i);
+ }
+ return maxSize;
+ }
+}
diff --git a/algorithm/leetcode/src/practice/N_33.java b/algorithm/leetcode/src/practice/N_33.java
new file mode 100644
index 0000000..b008870
--- /dev/null
+++ b/algorithm/leetcode/src/practice/N_33.java
@@ -0,0 +1,50 @@
+package practice;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.Scanner;
+
+/**
+ * @problem 33. 搜索旋转排序数组
+ * @idea 二分法
+ */
+public class N_33 {
+ public static void main(String[] args) throws Exception{
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ String[] s = br.readLine().split(",");
+ int n = s.length;
+ int[] nums = new int[n];
+ for (int i = 0; i < n; i++) {
+ nums[i] = Integer.parseInt(s[i]);
+ }
+ int target = new Scanner(System.in).nextInt();
+ br.close();
+ int index = search(nums, target);
+ System.out.println(index);
+ }
+
+ /**
+ * O(logn) + O(1)
+ * @param nums
+ * @param target
+ * @return
+ */
+ private static int search(int[] nums, int target) {
+ int len = nums.length;
+ if (len == 0) return 0;
+ if (len == 1) return nums[0] == target ? 0 : -1;
+ int l = 0, r = len - 1;
+ while (l <= r){
+ int mid = (l + r) / 2;
+ if(nums[mid] == target) return mid;
+ if(nums[mid] >= nums[0])
+ if(target >= nums[0] && target < nums[mid]) r = mid - 1;
+ else l = mid + 1;
+ else
+ if(target > nums[mid] && target <= nums[len - 1]) l = mid + 1;
+ else r = mid - 1;
+ }
+ return -1;
+ }
+
+}
diff --git a/algorithm/leetcode/src/practice/N_35.java b/algorithm/leetcode/src/practice/N_35.java
new file mode 100644
index 0000000..d0833bf
--- /dev/null
+++ b/algorithm/leetcode/src/practice/N_35.java
@@ -0,0 +1,15 @@
+package practice;
+
+public class N_35 {
+ public int searchInsert(int[] nums, int target) {
+ int left = 0, right = nums.length - 1;
+ int mid;
+ while (left < right){
+ mid = (left + right) / 2;
+ if(target < nums[mid]) right = mid - 1;
+ else if(target > nums[mid]) left = mid + 1;
+ else return mid;
+ }
+ return target <= nums[left] ? left : left + 1;
+ }
+}
diff --git a/algorithm/leetcode/src/practice/easy/N_1122.java b/algorithm/leetcode/src/practice/easy/N_1122.java
new file mode 100644
index 0000000..dbec1c7
--- /dev/null
+++ b/algorithm/leetcode/src/practice/easy/N_1122.java
@@ -0,0 +1,86 @@
+package practice.easy;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.TreeSet;
+
+/**
+ * @problem 1122. 数组的相对排序
+ * @idea 由于数组元素范围较小且元素个数较小,采用计数排序
+ */
+public class N_1122 {
+// public static int[] relativeSortArray(int[] arr1, int[] arr2) {
+// HashMap hs = new HashMap<>();
+// for (int num : arr1) {
+// int count = hs.getOrDefault(num, 0) + 1;
+// hs.put(num, count);
+// }
+// int i = 0;
+// for (int num : arr2) {
+// int size = hs.get(num);
+// while (size > 0){
+// arr1[i] = num;
+// ++i;
+// --size;
+// }
+// hs.remove(num);
+// }
+// TreeSet set = new TreeSet(hs.keySet());
+// for (Integer num : set) {
+// int size = hs.get(num);
+// while (size > 0){
+// arr1[i] = num;
+// ++i;
+// --size;
+// }
+// hs.remove(num);
+// }
+// return arr1;
+// }
+ public static int[] relativeSortArray(int[] arr1, int[] arr2) {
+ int[] arr = new int[1010];
+ for (int num : arr1) {
+ arr[num]++;
+ }
+ int i = 0;
+ for (int num : arr2) {
+ int size = arr[num];
+ while (size > 0){
+ arr1[i++] = num;
+ --size;
+ }
+ arr[num] = 0;
+ }
+ int len = arr.length;
+ for (int k = 0; k < len; ++k) {
+ while (arr[k] > 0){
+ arr1[i++] = k;
+ --arr[k];
+ }
+ }
+ return arr1;
+ }
+ public static void main(String[] args) throws IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ String l1 = br.readLine();
+ String l2 = br.readLine();
+ String[] l1_str = l1.split(",");
+ String[] l2_str = l2.split(",");
+ int len_1 = l1_str.length;
+ int len_2 = l2_str.length;
+ int[] arr1 = new int[len_1];
+ int[] arr2 = new int[len_2];
+ for (int i = 0; i < len_1; ++i){
+ arr1[i] = Integer.parseInt(l1_str[i]);
+ }
+ for (int i = 0; i < len_2; ++i){
+ arr2[i] = Integer.parseInt(l2_str[i]);
+ }
+ arr1 = relativeSortArray(arr1, arr2);
+ for (int i : arr1) {
+ System.out.print(i + " ");
+ }
+ }
+}
diff --git a/algorithm/leetcode/src/practice/easy/N_819.java b/algorithm/leetcode/src/practice/easy/N_819.java
new file mode 100644
index 0000000..ab2b43b
--- /dev/null
+++ b/algorithm/leetcode/src/practice/easy/N_819.java
@@ -0,0 +1,41 @@
+package practice.easy;
+
+import java.util.HashMap;
+import java.util.HashSet;
+
+/**
+ * @problem 819. 最常见的单词
+ * @idea 字符串的基础操作:StringBuilder Character HashSet HashMap
+ */
+public class N_819 {
+ public String mostCommonWord(String paragraph, String[] banned) {
+ HashSet bannedSet = new HashSet<>();
+ for (String str : banned) {
+ bannedSet.add(str.toLowerCase());
+ }
+ HashMap frequency = new HashMap<>();
+ StringBuilder sb = new StringBuilder();
+ int len = paragraph.length();
+ int maxFrequency = 0;
+
+ //for(i <= len)而不是for(i < len)的目的是:当最后一个单词以字母结尾时,将单词读入到StringBuilder,否则最后一个单词会丢失
+ for (int i = 0; i <= len; i++) {
+ if(i < len && Character.isLetter(paragraph.charAt(i)))
+ sb.append(paragraph.charAt(i));
+ else if(sb.length() != 0){
+ String word = sb.toString().toLowerCase();
+ if(bannedSet.size() == 0 || !bannedSet.contains(word)){
+ int count = frequency.getOrDefault(word, 0) + 1;
+ frequency.put(word, count);
+ maxFrequency = Math.max(maxFrequency, count);
+ }
+ sb.setLength(0);
+ }
+ }
+ for (String s : frequency.keySet()) {
+ if(frequency.get(s).equals(maxFrequency))
+ return s;
+ }
+ return null;
+ }
+}