From d6d9834f427882d157f547ba560a12e99537cc8c Mon Sep 17 00:00:00 2001 From: acbin <44314231+acbin@users.noreply.github.com> Date: Sun, 26 Nov 2023 05:16:49 +0000 Subject: [PATCH 1/2] feat: add weekly contest 373 --- .../README.md | 96 +++++++++++++++ .../README_EN.md | 86 +++++++++++++ .../images/similarmatrix.png | Bin 0 -> 29748 bytes .../README.md | 113 ++++++++++++++++++ .../README_EN.md | 103 ++++++++++++++++ .../README.md | 101 ++++++++++++++++ .../README_EN.md | 91 ++++++++++++++ .../README.md | 113 ++++++++++++++++++ .../README_EN.md | 103 ++++++++++++++++ solution/CONTEST_README.md | 7 ++ solution/CONTEST_README_EN.md | 7 ++ solution/README.md | 4 + solution/README_EN.md | 4 + solution/summary.md | 4 + solution/summary_en.md | 4 + 15 files changed, 836 insertions(+) create mode 100644 solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/README.md create mode 100644 solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/README_EN.md create mode 100644 solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/images/similarmatrix.png create mode 100644 solution/2900-2999/2947.Count Beautiful Substrings I/README.md create mode 100644 solution/2900-2999/2947.Count Beautiful Substrings I/README_EN.md create mode 100644 solution/2900-2999/2948.Make Lexicographically Smallest Array by Swapping Elements/README.md create mode 100644 solution/2900-2999/2948.Make Lexicographically Smallest Array by Swapping Elements/README_EN.md create mode 100644 solution/2900-2999/2949.Count Beautiful Substrings II/README.md create mode 100644 solution/2900-2999/2949.Count Beautiful Substrings II/README_EN.md diff --git a/solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/README.md b/solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/README.md new file mode 100644 index 0000000000000..aac4e770111a1 --- /dev/null +++ b/solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/README.md @@ -0,0 +1,96 @@ +# [2946. 循环移位后的矩阵相似检查](https://leetcode.cn/problems/matrix-similarity-after-cyclic-shifts) + +[English Version](/solution/2900-2999/2946.Matrix%20Similarity%20After%20Cyclic%20Shifts/README_EN.md) + +## 题目描述 + + + +

给你一个大小为 m x n 的整数矩阵 mat 和一个整数 k 。请你将矩阵中的 奇数 行循环 k 次,偶数 行循环 k 次。

+ +

如果初始矩阵和最终矩阵完全相同,则返回 true ,否则返回 false

+ +

 

+ +

示例 1:

+ +
+输入:mat = [[1,2,1,2],[5,5,5,5],[6,3,6,3]], k = 2
+输出:true
+解释:
+
+
+初始矩阵如图一所示。
+图二表示对奇数行右移一次且对偶数行左移一次后的矩阵状态。
+图三是经过两次循环移位后的最终矩阵状态,与初始矩阵相同。
+因此,返回 true 。
+
+ +

示例 2:

+ +
+输入:mat = [[2,2],[2,2]], k = 3
+输出:true
+解释:由于矩阵中的所有值都相等,即使进行循环移位,矩阵仍然保持不变。因此,返回 true 。
+
+ +

示例 3:

+ +
+输入:mat = [[1,2]], k = 1
+输出:false
+解释:循环移位一次后,mat = [[2,1]],与初始矩阵不相等。因此,返回 false 。
+
+ +

 

+ +

提示:

+ + + +## 解法 + + + + + +### **Python3** + + + +```python + +``` + +### **Java** + + + +```java + +``` + +### **C++** + +```cpp + +``` + +### **Go** + +```go + +``` + +### **...** + +``` + +``` + + diff --git a/solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/README_EN.md b/solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/README_EN.md new file mode 100644 index 0000000000000..885c720f84045 --- /dev/null +++ b/solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/README_EN.md @@ -0,0 +1,86 @@ +# [2946. Matrix Similarity After Cyclic Shifts](https://leetcode.com/problems/matrix-similarity-after-cyclic-shifts) + +[中文文档](/solution/2900-2999/2946.Matrix%20Similarity%20After%20Cyclic%20Shifts/README.md) + +## Description + +

You are given a 0-indexed m x n integer matrix mat and an integer k. You have to cyclically right shift odd indexed rows k times and cyclically left shift even indexed rows k times.

+ +

Return true if the initial and final matrix are exactly the same and false otherwise.

+ +

 

+

Example 1:

+ +
+Input: mat = [[1,2,1,2],[5,5,5,5],[6,3,6,3]], k = 2
+Output: true
+Explanation:
+
+
+Initially, the matrix looks like the first figure. 
+Second figure represents the state of the matrix after one right and left cyclic shifts to even and odd indexed rows.
+Third figure is the final state of the matrix after two cyclic shifts which is similar to the initial matrix.
+Therefore, return true.
+
+ +

Example 2:

+ +
+Input: mat = [[2,2],[2,2]], k = 3
+Output: true
+Explanation: As all the values are equal in the matrix, even after performing cyclic shifts the matrix will remain the same. Therefeore, we return true.
+
+ +

Example 3:

+ +
+Input: mat = [[1,2]], k = 1
+Output: false
+Explanation: After one cyclic shift, mat = [[2,1]] which is not equal to the initial matrix. Therefore we return false.
+
+ +

 

+

Constraints:

+ + + +## Solutions + + + +### **Python3** + +```python + +``` + +### **Java** + +```java + +``` + +### **C++** + +```cpp + +``` + +### **Go** + +```go + +``` + +### **...** + +``` + +``` + + diff --git a/solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/images/similarmatrix.png b/solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/images/similarmatrix.png new file mode 100644 index 0000000000000000000000000000000000000000..fac6c826cc18ce9133d1154ff1a95f6a79704abb GIT binary patch literal 29748 zcmeIbcUV)~wl}O>w`|=4+pZw8Eg*u_B=jPL7D5dj1f+x{BqX#12u($?prG_By*H%_ z2w1Stdk0a0&;+C?g!;{e?sNCK=e+m(p7(zL-1qhI5kgq3HRl*}jxpvKzwyf*U2Qei zeH{CC?AXDIQdh?8*zqfT$BvznzwH6jYuSokO=e-ys2+(Z|y?(+by7( zVco28-)E((Z%wqq=;E9)7_zdsAPTQbGW|Xq8rH>?Kq3E_ycoEhBMB>W{wGfli8ov363qu40A3Od7#^}*Dj zn@E_6x)H@ua1|{e7F7oz7F8G$=Kz;f*Hm}36O(e5qDnX;#9YLjog_#ILyD-14H9qQ z;A~H$Xc8#|Egh7Tx~j67ow0+Vo*qS6$H7A!+*wInQb$Bx9|2z3;yu*JqK+tQ6=k|R z5vB+ppa+*!c8BSqBqWIvcCG}3jfN*u(puHQUB}28>j^g?gFn+V(svMZ1TQ=YL>+x2 z0}9&1nSc@zb8&D$8frM2lF(}4m)5o})-*c=#lzSE;X+U{AUR_-5O}N`U0hoap=zY5 zucIh#=L#MvVnD!H>+4D=J2`uLXu8myDR=@*86}Fd(-v2A1e$mEFw}Q<(-zf60y!vY zJ5fChBD1TxZqK*R%)D%lxos(`!U2x9hhgcNw?36mo0!syoa6u7;(9atBt zB2M}UQ?fPP)EY-aNs36&F{WUost7|7T}N9bTW1u>6QSuWLeo<6&~w4t+QIByNIEDH z0t_of@IYV;v~=wy&8*$Gp){`Kji54~W zbn|p4A+Z!R0VhdPQX@FKQdAvWJv?39H1JqMag4L6h_M^RgCL1ODoSGDU>s_?Fm)$G zHLSC!wT-qY4XpOrD%4BwnkX8x(L}&#LP?=XXK%RSHU90O^q~F4W-Z; zL`^q)0uYdzu{FieMT|}m74b0hB+kfwmZmP2*R&()g11e`W{U1GeYz{0 zjMa3qH3s)Kk}`4d#OS&x5nQc-*-_PSl+ec#l+~qBP9hElcxwqAI!<3-+=(hmHZ%k~ zTor8#Cy}vs`l5DNu&xo}a6^)(zAcJE*AO#vF(4c1Xu=&7iTVa2M7p7}Ey~aYF5>R$ z6V62oWvJs|=cFcSrirsbDLE=a!*^FFQsERGH5*R^Oy58chBN?=F;>=B z^VF~buXOZK6bhM&!RXo;(LHS)JQ0$5QtGN=8gxyhs}f1uSc7DzW+Wo1XKD>ruPWWf zUfIM}*@$kaq~zeLgVNTfz-cZ-8xJB?$ra~prY+&FW?=$(nAA^l+mnJFt=A!QEB&z0VYY16n0!fGFZUa`LD#?WIsHB0!IJ?-IVDz-q z#YrYwG*bew6-p>EXR0mLSx3npT2xwkYA6#ejEJ@d(pJ&N9sFM0*;d&Jp-7gnp^19v zJL{uW>|9k{kZ|bvMy9sL9y)Xw5nLzbj1+-68#z;vVlHY_qPsIf(T+-jreR7}H$I2~&ZvzFAMiHI6% zS}T zMq+LCb(G*@K!{3WL||OpjdkD>rYa6jS~f_GJ6Xy@5l(S&68BW4D%q&O^sr-)O$Ka6m z`Z_pGl7W<}uAvT<9wj?_=N_*zU1crYgiKcu3?tk}On0mV+ zUwoWcQ@%mR3++91Vf*^}d0x}1HQ8W`n+3!Dd0+inrcI|U5|%gQmRDta#`E`YW%#b`HAG83Egb93?vOR7#$ZogtN=GO5d8R|KEgIfdvW_hju;UuPLbbD zs!v+Atbgd;bN_SVZr<+i5A9aGgUd;(6JtAS5x?h9c7&4?w&96khG!{9%tc#Pt*8Rl zs9!Hy1r-GFz7@yYvG9mI`7tUs4Ow$mtqAAG6I1Xg-I5#r0_H(^(oIEOt#&7f_?O;} z&o5qKx_BetQl*M#!9een^f*KJrs{s`bHEqg^H(v>cyS|}=j7!+7g87DQCa$+xPZAxGjeNw;8f(1v$39W7D`|Geh0JH&>VkG?|er zZ9t|;4trUQOHTq(ZO^*9^#-&5s_FBEu@wir3&~%Vru)kwV!;R`z3If-?a8nN=4<=^ zUCdzCPXc%wd-gQ`5+VH77#V8I2`}_N7-izcwS8|Ep6$s1mNPl>HA`UOVvD7gc=h{qo;K_g`M6<~)=|*7KlOqSu zMF?5Mke_}Ga2ulbqG>}9RL@05TIFm-P7;rf+*bp7TcBl__@L7(II%l7AmU=> z=fcv4w0_)fkpEf&8aus@8_)wEZ?0 z6W(sv$9XT*O+Fn75^y;#7(Ro)1O|-wz*jPz*jX7f;jga3rqQ=wdMY!e{q->`S@J&d zKD*F2G3$Ql!KqXpb8

?C}-FT_YI^8^1;7D<(NfklGF<`->tRb1Z{W|=us+Jf=IpL?-Ie;!$!3MxzA(+}P3++YeNH%kBvfT>G9hv~U%i%j3hfv(>CX zhBp1Q0mlx1cKKfEHQO)A-u9pUHpl(GG0Zzt_|l$mO+U^ZdVfyVY(|>zYr4?tISoDO zDtudV@#~}JsRQIn$K9LvCEiO`efU*a{r6)+C%^8y>Kz!Gi{NpjwuUsWcNO?jM~;ee z#0(h+mkh{Nl9zK`XR|wxGV7W)@)5;!O1q4)C5MMlvf@axGYR z(v7aG3fk+gj&N^9bz8U(9c6I24~lL~s3~w9Te~H{l;l=_A)~lE&iT!W$*MUYif9(U z7J8v0v256Pt<-zLG#2RDV}Pn(o_MabTgYl}8xT8#$lEG&IHjZc9LZ1x3>^lK&xqy- zGO2uR=|VmLQ<04#ir-k=5F3aNjU`tQD!z7`n{!XN*Q{CeJH29!X79D`4B5luC+imV zj4e_Pj53WaFtH}`7>tiq;$n6j&kB&9%*>Owr}FkQ&>c1FW5UNm+uDoI#au9`Pqdp^ zuqwxc-MEN2G{JSZjet8?nti7ET-ro2P&`cuQv6)i^82NCXM^uaKC+(PZG7#~aUY@@kN6o^dCMxirhP&F=DQd>oVwn6>tJbnKx<=dKbHTj4cLF8B?sXS zqW%H_S-tjnDg6Oo3z^cYW4QD?@UQgdhT$OW6j1lwAIFxaUjZ&U=~tvW91e1 zrpWb{XP%4gZED;@tM1^*xi@l$nmwpR(vaqd3>1fF_3vp*z&>cc?6j$kPK6^o`b%gz zfAICUo}AvXCqXbX$&{xF*)w{2=^D!^{JO0;|04G4h$B<=S%YxR`U4*3a0HlE^YF>u zl;YEF&ydBm^F}+MjYhCRwBfvf9LHETM$vC#2XOL>(QmjL-VDfZ&Ie~K0|n>tWIUof zNY6eUxr?#}wr(n?K-+7!JR`t9GTe5Cwl|-pva1Bx-&5ym{FH!>XCBCe7N3Q0P9MO9 zwC~rdO1#rGVdABhJ7gm)Rdzf2%q)Bgbv{0f(HPy)?-(dpsxC3;gv_vh{FQn_3AV#e z_6kOzH+lf|d{WciPF~O{y3kH#j zb^T-2A=EqzYD~_Zs}G6LN((jjp+=#mk~_A|?NuCJ8za|=)#V5pS!fW}p?JLF3|L>h zdCW43O=|Q3>P*k3<5X?;o5fvC$C#i{w}x)ytQh>>d=-9Qe6eBNJF^Y3fRglbxT?ZWbA1!|jDcIO8$ zM!POe$4`mzAr!t0Z*4BW>A)}YT=OsU7H=9XckNJ!`*Pt=sRhAlFowoR%^`;##XALe zF3su2DrVKmCNw2*Z@R9{l(D0b)#n#W2gv3I4pYfIRK!hiN7Kr|o-^pW*5{#Gb&i6lPe&|JVkG*a^4$ElBX$F@1z=e0q?Xrw0+q-D3zt7s?pJ)BJ z%lK_{s*tqfj9Dc|42ks~M-`ht#y4gP?9SNyr=RW~c>93+(wEo5zM^>*Q`!2LDC=dp zy9O8sdap(=WVu4y2yp=JFz?^~>2)CFu)~5tP;h#=p^^EHeZF$#Q{XMx*7Q`_E*12Y z!@h8NF#GkgC(!H{OAdhT-2-j!{wdkeu>5V!bL^Z;s_Rw}px61gAJUP1D8JekEG{I< zU7c6Xh?xvcShu5h#J)G^#4=u4cyfvuzv~ui0C|=XP7#+j|Mu&@{@y+Syo%d&URls3 zzvnwyQoZdNt_f>{HXRt30?z$;K>KxIvf9nxRiLBov)eN=nMxP2)hV2Cd@ZH395L?E z27Gj3kZz^?*t0T(s6#P`j(~3#oT=H`Okqo8lA1<>73A}tE!2lz%3Les1JRM1-L6^r zmRHO7FqLc?RXKO$ZySsz7Q0QhyLFr5?$b{&-*8gmnx)3$ma>hjvR9Tmzl#HpH>(U? zE6F7SyAf)B9^qGZh6Lb!S^AGrxHR*vlx%(W`0|C$n?%HN1dfx_#Drgmbvp z<9O@pbir^+3hq_dJ6i79?$*y*g38&z+`jKrPEfu;)`fgK2kuKttOP}U-$LI;Mm)`I zDhWf?-^5l>`Y3sXNSS1EUpujrsYy#377qXB$(94pWEw35{D>pf?|hG?&KNN)Kiul)$Yz|r@N}VG zAkb$*r_wAdFru^TFh4=JkT&4M8PzjwRyhUNXID%C9{Z8q3qw<2wa;zOJsX;PNX&-{ zFai)eC_o-L?`-|D_*%1jb!dc@FLUpyvChwy2M1{2%7FtMTVHQO^M4XEQB)OpB5dJM z(&C9IX5kPcLRiMHiD;=m5cWg)kR{MxK9UD1U*8yp@E*5utKgEsh0t!SQg|<@WDH>6 z^gF6$ZaMVa`b8_3mwyI?HpN4#Vll{a3EpTW+|Gu>y3ACfmcS&g>{F9WFl} zPk!4RoywK88H>_ro1{fQp$#0EssSb`&P2W|#L3@V~|F%2y&RA@rcwa4lxyl^l=+o5K2+rRWy#^ziHKek-pC z@zm}~J|5=Yi2{$;0@D4rE?@rc9iRvxWH@==wg*~~Svk=h)vlt_LqYK{l#G&X%_-_X ziN+XNv=)>340pl5{R`|6Klk&;H_IO?ESI;;(3T&~8iT>GVE@fv0uls=w1k3W7v8yn zUFlXNP^k0WNM7&{DGBuU;s148E#d9c$y;Z2?`fBzLFoBkJ|5$Hmnj2$U44RA?oAM& zpDy0%{#J1ANC}NAtfJtK{9sX(A|Wl@h{I*8k?fL`)W=#923bUC6%2J*2!G3l)pi|8)WQ|D5vZ^E%6^zpw!R z<4UED4Xt*=^%DmlT-|+6WZyLc=HVrkUv?eoDc1xLgR8sgYM0_?xf&)Oc1}*5__lKH z&ua(wYBng%ScN_BTrpzvC&)M2K zw`ZP%WO+xjO5iH0rE79;_`Lw$+myl9so&6+0OkgwoV$9;i-bSR4YK=G2Q_LnKa*hN4&U|=`)Y{SG#uY zO6cq){o$&ey{%L5x5n|0{ul^I>Ki;NXtwkvga@5GT`nz`6w=nZd!B&T zK5}`S5cVv9_pUM0RqV?u@=+QDz4OO-Az=lrog`-$=x!V_g}?57oYX}KDv*{tU5eb_ zbTW%wQ;SMh;z>!``>CTfj{hk~44)^f*5QHxhTVs+w`9?#Kqf3{4gvO-;lc_!7dAX5 z+tXNFPh60PaBFA25&Ax}s|&demZDCk9UQLc%@L#j zt8u()9TA`GfqaHR!bM*aom3Z-bz27@S+Hva`Sz6(|m4k?^UlBHz(z7 zETIexjzCo1;$3!Jx+u{Xvb(qUFQJOEHa$;I4`AHTuwRe=f&4?jw_%JUs&28nSxfv}D(0{)u2Beh&fxUNxj`1UaC*REP2(IF^lO z&zv82h^sIi;~5{)ownf)eEK{7i2FlF64R$qymV74%ZEACl-b^V%@WjdH>S1?`pPGI(ER!=x>fQwjWbAVQU z5i_IxP}`VC0T+#ph?cW`b1!@PJax#WLC|<|c+FE-LhH*_%O1MG5yr7g*Kp)P6QeeHIr{tPVof$m2V^h>0*+Aj+ijz(!}^vV}`c-!*_QpGdqqbQX$D6CE}qZ=wxnD^OU3tN6gH_A-}B+LKC8g zRO8gUkG09+UG5OHypH72fOXEg{%~#S&JRs#Z3G?VF)I*g+Rk47D0Ixk#KZ!XP#Ub& zi$O^gAWdl+sCdSTYR-@iYZE9y$Th{wls&BTXOrgRa(ccqys%=XbRhk+WMpx8_f-mj z0Tp){nV0-w;o5{C0EH6*NqHsR8p3|ehJpOp#$VH(Gy%wp%aK2z@pu^v_*`)~D#6z` zO*gK2byj7Xnsx%hoS5Id8eo4!qsmI(R$o7U)<>%NOoaGiR>zgX_zb*+A?zCL=1QvAg>F<59iS`@Vfh`>`iU_LYY~nonSK+^%(Lbg00gvRMEZy zs_SD<8mg2yW1>+_z%ExbDCHN%R^{(Yo9zyJ(>)voem!M*fJ*P*k~6kWP=Hf!g;y*A}src7Nj5Q&kN8}{GZCQIvEx<8_=GSbl?uq+d=;@zTBV2QQy9|yc zB*RO)$;VKiuSDWYWK{eyD=>I0Pl?C;r%IMRd)~)jVulr?!z+q273(bDMxcr+gH~ByjXkDqp!J3?UB{RFC-OqkTuQWm7{ zW6usun^d>aEl>gJ0Lx*-lbB>0ez-DUH8TDf7T-VJTVaqPRSoj|e~tF-NmtF)+Vk>l z^`kMw{OH-rxoT0E*HW8WhLkG<-psh@EKuj>_2mUi2Y@-ef4Nj|TrCDLFjQNcfh+#3 z960CM$FJCUk_BhQ6p4`np|`=Buj@o#g2DXx9e~{tEs0H0{Y>TgzTd*Zelx@jR&Yc| zPr;4%+<({Haq>e*FC)buqx`bk`hC;Xr1H0?yizHCYXe+ZvDin(RzB2zhnzg=eu~)9 z$j)=*XY+3$AeWnW@7Ctr)}v;*Qc}$k2|PO%4-uN8)&s)VSRS2vg-i*hleS) z=pFh&s_MS{SleAO_zd;3obrDfPnA^}xN-^Xm(hmC>D2Klw>fmukteCqI-sXuM)v;8 z`zDZHrweL)D?nXP^_*+f*KRa`Jy0vQHrF_puaYdqhb~8HHF?)9f%@^?qe>Ys&<@Xs zSKdgpSFg>=Oq~X%Lg;>x#NyaS87MB^M&KTK+C#uTX*q8<9~5cvnpx%L3Q$uGu%Daa z;p7cGCfvMJXCL04F|sYhulclFYIl35HN@a~0N}*GlNGE)dZkcobl_3J?37129aVxi zPq%5rfTbwX*4)82c)P?rE-9J?0^ZQn&n$*ULD0V9Hyp&`O}XEP-pYS_;tmog*QiurhJ|26Ojiimy^NxFvEzY zkOz&6!tx+AllhSYL{K1`9 zoF8`?6ggR!1uzM_HTGRO^Nu4 zNF>{5cN`MF=6p5`4!ptTLJ+JvcC_A;)WKyu&eR{3(HgPznhDPbV2y4v5U?qPm*^xM zC;6aQpLX~+;_S%POh(?&0(J}7VQy(w|GWa&!2Z|$uQkqgB>{(YK4J?5nhY;{#-B22 zVGNy%X7gU4Y2xlwE)R8rnsz*9DC~js5NnCUT4xe1Lp>vBrzW8pV009`%EuydDyn;_ z+t5{@!Rh?*DY%LC6r823nG~NYnLALWF{hNvBxDlX;|Lw;O+qs}t(r74SIbu$ z8yh_wBk2IX3xT`CSiA^ zn~pp#X($w&4Ot|!EeCLtk1x0_ZhRXM_W7D)HN$(jP-iI6V|mD3$925f@d*>43`51= zd)VGE%ut+e?(Uy~kHqH*S3&-&UoRogw^isjl3v!Bp z7y0H6>dzMAeu?o((M^p2L^c(1?bg`#Ofh$@gmeTZPT}Zfn19 zMG0CEH0$Z{LeIzb{5h#48-^o5wrKmUb|morZZWWY;bvaRfVklyvp=8;x@y?#rvdid zvC$_C4uBAatdy5K)2!!Zu@^X!fzox};y)dr(MLj8T>@&JtuV-*F{y7nRsy1uuBped zhTUX|&g_{EZx1WI<<>zEd3OM?keQkj2=h}Rz@_b}Hh^H_e1r2X^mJ`ltNC=KAXC-) zpiwxcc9GHay&Qf!_y=I%9{L04@QP|bz@nHFEw@&CG9V=F!AwK1Kuj+~2e`HdQ;D2p zfJ4Dhkwq;{jW&CDyeuTRa#!V{K?96|c@5f9+PovYxI2FFtx`buczi~9wp7^TVICRO|6&NVBAQsWNxVC0sN3d z00Rhv8+6#M*l7^hjIpoPgg)&D>)8A}7(c*BNH=v+IspoxGCx|6wdt>TF!Qg)auLf2 z?4RzO{D$bA*+(ohcbQohXm4Gg5B7_r4LVOO^1uI9T83yo7boRvKb^S{9bJTLIc4L^ zIOg}opF7pKYRYgX*!Q4u7^ar_z`dW40r%TnKb>yx`=RB7*8|3}V?vjsz5#5@X?uIi z(8a~zm(j}CZEFls;IvVC?hGV#FQh)K=yhfkh?8&y(>Jb45ADrs?un=ckYZWCYs<&2 z@p~j-uKXZIN(6_-!I0in&d>%|1L4d}FT8jM6c19~Rh^36s_wIoO^dAhjGYYjTels# z*vRnViY=HcAAdAiFHm5YlNdO`gSg{eI;OC-s1SUm44C_L$I?Dt!J74j$p~{Y3WC|* zJ}Wqb*<9a=wuw~$u**5|*y&!9d9LP+&CF2(UdXiYT-8TbiaLM^8;&JQ zt$%sN$vg3(NK#;KzwpJZ+lxt-AS!|Y@j2d|OvOtO)LS*~wW-vOr;kCzDHQejDg;`p zNQ(9|5Hu|uodr8TaCKd5@x|5cu;g1s_U_Kf?9>W#V~$~bjcC{8>{OvAdsFTa9ohL> zDBzr7ku%Py6pH*N(?1Pm)Kmzhjr)C$yg4(+^fChJe7Z1J=FUIBX~1)&`bJ8;VDII~ zxm})9@E`>`MV1;s`2KcvBy4y~ zau{9@rS$$fU$@6O@F2u{+8JR4$L*_%GFbD%gp`7^ zE6I1jkm|-{VvZS%o`~`9h-4YyBtJbp1VHPPK{B)I0Dj9!daOvF544H{Cx&o<+=~a{ zo16H^p?j7#q4-k(;C>*KdE5_8Rio-AO2w*I?vm7nKXku3q8>=UUdIX&{YbE@tj$ z>*Cq+FlEB+Ar4=d6+1Y=BXOsWr)|wW)NwAFEr<_bXcn_bgEF0BE~l>2G%jpxosaBV z5P86E@j3Cv$(eI3pbhjnXaj9}2wE9I7f5X>_t)(#;k}xoABiH+L@KzsU+d_LQROm} zQyjRsWalDD4(YmkgbM+Cn=8Y@^G_*~DYu?`YkD9H_`k^5bgjQi!QpAh0)LPyWxGOs zYEa7c%d}Iux6JPD7cMR96FVZ%u$?SCkJ&zd?->0nZ}gu#MyF4JHqw7eCMDK_#@Qi| z{z|ZFBpUu%fo1=eH z6#QG3iJ!QeAb|Y&Nu=?UNaH6L%1=6*ZPuWl0r<}V{J$N5{|vhSdqMX=|M8gZ6ewsP zd@%cLv3a}7X=r51PSw`T*K8U9oHTi?W<{l9GCj84 zYI7lSX(A;!9VGAjCVv(7P(-330t>h+qcOPyQxPG%xiT_YIlMux7zvW$pl?8E6p+C` z?FedkgjmN?!UQeLybh$lsvV{*L5rf**=z5UOyX(0);SknYKDA$JlfT5SU+{hF zI%uko4FdIFH&AQ77yTO1a~WpgJ^y+VkVYUvC-Vke-#b7ux7}xXNP>3+hzVigQpYoC+Cn#S9<$;HC3V4YKG5`A zL_K(s{!lvpgiNSN_)!Ayg|2Pj#r$vZ0*|-|41eLyVbI=2SZtCgh^m1=_ zk52c?cHhQv7#@`GbDUXPKavWqy+2%I(LP#OKc~+zz+fq(31mD@x!DGWot3h*y!Ppn z+iIu2ju!X&2Nr>G?8toyZGe>FYwx_Mhla>n*yL9}yx}J0kf3hH)xH+rZb?{aYMwGw zH9Y+ga3I(dc}$i*xk)cld9AZA_G@C2w=3;4za4hOGtdo-SO-uG?|m@RYZt234&XVF zfWzX^5+Da~s-3Rc{94d~wp<9Iy_L@@h+MMu1)!Hn!vebD>ZFdJ^mWDRT3L4G=#O~Z z^>v0s4a)ORL4v>?$I!r%1_SlKGf;rRiO+!YY)bNbQ2NoYZiH|B!Bvg*pAEEHw{gC} zuZIqjVni+7(ebwVE$4{wfr=WQ;rg;Fj zLt0044s5T!#rLLv&~~1ul!!;VCir|i;S%jB-VZAL3EftH8{JPf=C(E|bg12UWts79 zwWmhj!slz3VUS;YcNm!1>|i+oRLQtqKI7t?Rq1bK-aj-lBc#2l84sX=>}?v7UCs>< ze+VnofE{-JzInI={~gE0MF3e4>tV(~t+Jh-Tubw(phWJ}ofiSvP1_!bspJiJ)k0O& zVnmDOO6x88FnO@@*iq)yJ@%XaSd=-zYyqrTm)$7<*CpliVHdYLXlceLHAF^pgNiIt zmr-=ZYW}YAVgK!kn{z;<7WUIXp~-I2ML?na7e8rYV!lHsemhLWzX!YfKFbEYY+fj( z9(Qe&bA&4^)CWK!De7GM}B{f zjlKlE`EIyxA%H`saNeLFG>Fe909cE`m6KoP(AKdE zaU~7mDxHAZ;*$gKl~J2LY2L9Rx!j&PE&?GCO%y1*=7oo>-zv_X;c?_4pt{Fi=!pBR ze7wc!cQI$$=peAUdC36rqFsbIbdfF!_4FGW0crmQeb7x!VgfIa<$TxMwLwRW@`&)D zW#Qejg4t6i>yiD9-Y1OY%|+M^cqlv@Q7!Bk2Qu^YB>*@ajGEX422P-AA-sT8^(f)` zqgYMUckPNnrMH9TuouaIp+wNEm~U)rp%fJ1Qz7;m%}(Z{Zsx&>^~7>U#2hP=vh|Ik zl9q8!&=k;OnX!*H=-k_?)A4P;5^l;sw=D9kFAw|q)yF&oxQeu6RTC;B4om}op*wjc z4MxaXPdXzI!!zYb7{L zSb*EH!LL(p?Q>BFFx`=x^RI&5bm^^QdW|+(yUB(aWRD8qKdGpsPjpm4BsU>h1+Si?XRpqjYnnJ*Mxm94vVdEdE0c!dEw zY$%J#=qd+mJw4stVKx8tehu6C%1?I%+Rw|+-+3eVc<~VbEeiAAOHzFmhyVnIeoe#I zeL?qaSFi!!P}!`2{HdqjDk{FWhdpqO+P|(~0IS32?%7&_vrv8gP{DoqyW4h1Q>&}X zllQ`3*p$Nr{4Bs3B89X#eJ?RJZ$L2&U_!G0tl^a?<<y zo7j5q1nh1-?t)p!9B1`nvrO=n(5=K3$o0>FakJ7qzpQj5Y=%L;J8TXm?XfmxT+{z_ z{aIMv;nI&LO+78HT#Bjhq84NT9mNBkYM9sW$g7 z`zugNIW;inyIlE3Yo3Mj5854VlSJb5mu*iynRM%v!@4^JdGKa-K}g-}XnEMTo5J3w z>vKXsKnjtmyFAz34J{$MF^kV1S%9?QVz=M=2sZ?m;PA6+Tn<_V`z2lo&`KO=82*~? zo~8rXzEsk34-1w97tfhK_Q4SXJ2G9~x8;YJRJakOKixjt&Kyq|?#C82i4)hY%f8R^ zG3~sipdKi4Kk{%~(!23vlKKBUNtl&GxUe~a%)G^fnDm@m81Ha=qiZxo8LV0I>=|=qg+fhF~5B`y&2J zz0Qbli`VUHwg$y-%-mGRLNKrDPEhcWS43r9Uen}ecQhY!k+YT*>NeP zB|ytMkL+FIA*DT@3ABvKBwYrO;R_03iREK36##11 z3o}0d0u5FhEkw%Kk!zb}$RC6PV6k23Sbts)QGHqXZG6qMXaO)FC`PAp>@&Bz8?g=$ z*eDr*^L#J@;pW;w3@J1FWDejbkwS7UI5!A-db~jUm&li;p)G@#0bnKLC^1kTvXY6FJIY9C~GX+?NVC0({8*_d- zFkCY!uMb2~9W8#FuKD~j_bzK3*a9aKG(ebax90+UU{&9*T3BOd=C=pQzURO*oWUIKB9F5+Xtpl=%UDc~34w zc~u=2WR3~@MK6S3XcAP|F##O9k2xDSTLHo~lZXPV?$2#r9DCwFq9uRaVs9u}amGSUcZIk{ZNXp-Hp z;5GdK$%Z;+>0vEO;8#H}_~aU!JC^L_jFAAavVn{=ouj}x0Pw(@l+ysNuw#48 z4fVFo7>F!#3ddv)qVvOwPJWFQsPV=?_UOe0vg{ z27=)HuagjuOIlgY#>~j6rZ2Zx0d3L~XVXe9Ur}k3Q`-?8-!G9zMft{VHSO;nSs$GN zJZHE;mgTWdE^4RVP1GtWsxfv1+JDcIPs2j1VNpa|}0ELy1iTor)zoeJ#& zapVJlVaAnMT0v}K+?!um`q<81nOWdD@VD8-drF5o86E-jGym{Zg6Icjtgqz@Vs$G3Y^ej-&UWc;($VpT9X)2m zJiTBAtB}o#o+_a+FK0yA*;XB1 zrUxwR-c$Ms8gulX$~T&A0G~AS26=4{g}J}>W4~Ouln@H-3&3>ge#}Te!pC>%&eg#T z{+wJf{^XC5xG|Osj2v@~KFE_58g5Us)c(4P@Eho4!7niNw}7ge?K|EVm z6quu-9RNMov%2iPYXO{qZQrGt8qSS(?ajQCFF5wrn`|&Zsqv`*X4vdjF_>*ex$8Ka zr-rw$sFls5mdq2Ri{pNPQ*YqbWwNB6_@SYi!=+6lz!k)_wJmR-J2b0y-!}t?sP(tr zjExuUz9J9_<>ZML57poOe3jgMW0)XeaZA=@c4*GmeHGX_Q-c_=I0xsT+(7Y_7uS!b zcz2KWfHU~%<=2h4lZ;_iCO~mEFmTl^RNpA8|8GYTFl!d4AB2&9@1BgF&msfXt4Y9L zWIy7P?LF7{!d!j?Am(o(HCwVp-cdnJ2~6s=zC6-;C8CcEkXHAtm%!3>eDxHZ0oPK; z*3zKEVrkuLKtFiyAM}HI{+P`a+szkJ-UA*Z_c@n~n~ilw74D6BNwK{z6pf_P0q>ql zS{7XJgm2AT-rRMW^TV&;!^W`X+K=7?7LVkQv_d%hLPO9>(nTn>1R4Y^pc&;;cO^r^ z?6!T7;V&wjG0aAP?>YndqLliG7TIS@?P&e#)1Cx#f&v4?0)t_~Tyu5}xNC9X#5>8Y z(ovT`(cj+7@CR_fFf|Yh^W+=-q6$%IC48wEjM}kdpAGaG0b9(3rF4lZ!n?HbnJ64g zC;=PA4L9yLN{+BYN-BKDt#DJ`+C*;s<~@;gD>0@jha zQ0iUoR%d=kfdMO6_m_8V+8SeFv+Iy7YKklZ$D&a*+f&y-e)KZO`SUJy z3XJo&b}S41)pRM&DYDF_%BGq)p_nzB3z`%50KC|b&oB5F%Kw4K7cuo^5*$~C^MX?b z&OIH4K22d4qfeUe$-gotNH_i44@LO@2LM(l_4DHtetc@h&-&BP`qR())Bi23J^$mF zdVYQ`&Hwn%rTO0hed%YSH3Jh++iXnGr#Y!ZpZx^Lntr@I9{zl5*B{exBpWa1bMP^s OJ5Vax%K1uHuKz!6hvg3d literal 0 HcmV?d00001 diff --git a/solution/2900-2999/2947.Count Beautiful Substrings I/README.md b/solution/2900-2999/2947.Count Beautiful Substrings I/README.md new file mode 100644 index 0000000000000..3292f65ccd8fe --- /dev/null +++ b/solution/2900-2999/2947.Count Beautiful Substrings I/README.md @@ -0,0 +1,113 @@ +# [2947. 统计美丽子字符串 I](https://leetcode.cn/problems/count-beautiful-substrings-i) + +[English Version](/solution/2900-2999/2947.Count%20Beautiful%20Substrings%20I/README_EN.md) + +## 题目描述 + + + +

给你一个字符串 s 和一个正整数 k

+ +

vowelsconsonants 分别表示字符串中元音字母和辅音字母的数量。

+ +

如果某个字符串满足以下条件,则称其为 美丽字符串

+ +
    +
  • vowels == consonants,即元音字母和辅音字母的数量相等。
  • +
  • (vowels * consonants) % k == 0,即元音字母和辅音字母的数量的乘积能被 k 整除。
  • +
+ +

返回字符串 s非空美丽子字符串 的数量。

+ +

子字符串是字符串中的一个连续字符序列。

+ +

英语中的 元音字母 'a''e''i''o''u'

+ +

英语中的 辅音字母 为除了元音字母之外的所有字母。

+ +

 

+ +

示例 1:

+ +
+输入:s = "baeyh", k = 2
+输出:2
+解释:字符串 s 中有 2 个美丽子字符串。
+- 子字符串 "baeyh",vowels = 2(["a","e"]),consonants = 2(["y","h"])。
+可以看出字符串 "aeyh" 是美丽字符串,因为 vowels == consonants 且 vowels * consonants % k == 0 。
+- 子字符串 "baeyh",vowels = 2(["a","e"]),consonants = 2(["b","y"])。
+可以看出字符串 "baey" 是美丽字符串,因为 vowels == consonants 且 vowels * consonants % k == 0 。
+可以证明字符串 s 中只有 2 个美丽子字符串。
+
+ +

示例 2:

+ +
+输入:s = "abba", k = 1
+输出:3
+解释:字符串 s 中有 3 个美丽子字符串。
+- 子字符串 "abba",vowels = 1(["a"]),consonants = 1(["b"])。
+- 子字符串 "abba",vowels = 1(["a"]),consonants = 1(["b"])。
+- 子字符串 "abba",vowels = 2(["a","a"]),consonants = 2(["b","b"])。
+可以证明字符串 s 中只有 3 个美丽子字符串。
+
+ +

示例 3:

+ +
+输入:s = "bcdf", k = 1
+输出:0
+解释:字符串 s 中没有美丽子字符串。
+
+ +

 

+ +

提示:

+ +
    +
  • 1 <= s.length <= 1000
  • +
  • 1 <= k <= 1000
  • +
  • s 仅由小写英文字母组成。
  • +
+ +## 解法 + + + + + +### **Python3** + + + +```python + +``` + +### **Java** + + + +```java + +``` + +### **C++** + +```cpp + +``` + +### **Go** + +```go + +``` + +### **...** + +``` + +``` + + diff --git a/solution/2900-2999/2947.Count Beautiful Substrings I/README_EN.md b/solution/2900-2999/2947.Count Beautiful Substrings I/README_EN.md new file mode 100644 index 0000000000000..c42d163d30c74 --- /dev/null +++ b/solution/2900-2999/2947.Count Beautiful Substrings I/README_EN.md @@ -0,0 +1,103 @@ +# [2947. Count Beautiful Substrings I](https://leetcode.com/problems/count-beautiful-substrings-i) + +[中文文档](/solution/2900-2999/2947.Count%20Beautiful%20Substrings%20I/README.md) + +## Description + +

You are given a string s and a positive integer k.

+ +

Let vowels and consonants be the number of vowels and consonants in a string.

+ +

A string is beautiful if:

+ +
    +
  • vowels == consonants.
  • +
  • (vowels * consonants) % k == 0, in other terms the multiplication of vowels and consonants is divisible by k.
  • +
+ +

Return the number of non-empty beautiful substrings in the given string s.

+ +

A substring is a contiguous sequence of characters in a string.

+ +

Vowel letters in English are 'a', 'e', 'i', 'o', and 'u'.

+ +

Consonant letters in English are every letter except vowels.

+ +

 

+

Example 1:

+ +
+Input: s = "baeyh", k = 2
+Output: 2
+Explanation: There are 2 beautiful substrings in the given string.
+- Substring "baeyh", vowels = 2 (["a",e"]), consonants = 2 (["y","h"]).
+You can see that string "aeyh" is beautiful as vowels == consonants and vowels * consonants % k == 0.
+- Substring "baeyh", vowels = 2 (["a",e"]), consonants = 2 (["b","y"]). 
+You can see that string "baey" is beautiful as vowels == consonants and vowels * consonants % k == 0.
+It can be shown that there are only 2 beautiful substrings in the given string.
+
+ +

Example 2:

+ +
+Input: s = "abba", k = 1
+Output: 3
+Explanation: There are 3 beautiful substrings in the given string.
+- Substring "abba", vowels = 1 (["a"]), consonants = 1 (["b"]). 
+- Substring "abba", vowels = 1 (["a"]), consonants = 1 (["b"]).
+- Substring "abba", vowels = 2 (["a","a"]), consonants = 2 (["b","b"]).
+It can be shown that there are only 3 beautiful substrings in the given string.
+
+ +

Example 3:

+ +
+Input: s = "bcdf", k = 1
+Output: 0
+Explanation: There are no beautiful substrings in the given string.
+
+ +

 

+

Constraints:

+ +
    +
  • 1 <= s.length <= 1000
  • +
  • 1 <= k <= 1000
  • +
  • s consists of only English lowercase letters.
  • +
+ +## Solutions + + + +### **Python3** + +```python + +``` + +### **Java** + +```java + +``` + +### **C++** + +```cpp + +``` + +### **Go** + +```go + +``` + +### **...** + +``` + +``` + + diff --git a/solution/2900-2999/2948.Make Lexicographically Smallest Array by Swapping Elements/README.md b/solution/2900-2999/2948.Make Lexicographically Smallest Array by Swapping Elements/README.md new file mode 100644 index 0000000000000..39cdaade9fb30 --- /dev/null +++ b/solution/2900-2999/2948.Make Lexicographically Smallest Array by Swapping Elements/README.md @@ -0,0 +1,101 @@ +# [2948. 交换得到字典序最小的数组](https://leetcode.cn/problems/make-lexicographically-smallest-array-by-swapping-elements) + +[English Version](/solution/2900-2999/2948.Make%20Lexicographically%20Smallest%20Array%20by%20Swapping%20Elements/README_EN.md) + +## 题目描述 + + + +

给你一个下标从 0 开始的 正整数 数组 nums 和一个 正整数 limit

+ +

在一次操作中,你可以选择任意两个下标 ij如果 满足 |nums[i] - nums[j]| <= limit ,则交换 nums[i]nums[j]

+ +

返回执行任意次操作后能得到的 字典序最小的数组

+ +

如果在数组 a 和数组 b 第一个不同的位置上,数组 a 中的对应字符比数组 b 中的对应字符的字典序更小,则认为数组 a 就比数组 b 字典序更小。例如,数组 [2,10,3] 比数组 [10,2,3] 字典序更小,下标 0 处是两个数组第一个不同的位置,且 2 < 10

+ +

 

+ +

示例 1:

+ +
+输入:nums = [1,5,3,9,8], limit = 2
+输出:[1,3,5,8,9]
+解释:执行 2 次操作:
+- 交换 nums[1] 和 nums[2] 。数组变为 [1,3,5,9,8] 。
+- 交换 nums[3] 和 nums[4] 。数组变为 [1,3,5,8,9] 。
+即便执行更多次操作,也无法得到字典序更小的数组。
+注意,执行不同的操作也可能会得到相同的结果。
+
+ +

示例 2:

+ +
+输入:nums = [1,7,6,18,2,1], limit = 3
+输出:[1,6,7,18,1,2]
+解释:执行 3 次操作:
+- 交换 nums[1] 和 nums[2] 。数组变为 [1,6,7,18,2,1] 。
+- 交换 nums[0] 和 nums[4] 。数组变为 [2,6,7,18,1,1] 。
+- 交换 nums[0] 和 nums[5] 。数组变为 [1,6,7,18,1,2] 。
+即便执行更多次操作,也无法得到字典序更小的数组。
+
+ +

示例 3:

+ +
+输入:nums = [1,7,28,19,10], limit = 3
+输出:[1,7,28,19,10]
+解释:[1,7,28,19,10] 是字典序最小的数组,因为不管怎么选择下标都无法执行操作。
+
+ +

 

+ +

提示:

+ +
    +
  • 1 <= nums.length <= 105
  • +
  • 1 <= nums[i] <= 109
  • +
  • 1 <= limit <= 109
  • +
+ +## 解法 + + + + + +### **Python3** + + + +```python + +``` + +### **Java** + + + +```java + +``` + +### **C++** + +```cpp + +``` + +### **Go** + +```go + +``` + +### **...** + +``` + +``` + + diff --git a/solution/2900-2999/2948.Make Lexicographically Smallest Array by Swapping Elements/README_EN.md b/solution/2900-2999/2948.Make Lexicographically Smallest Array by Swapping Elements/README_EN.md new file mode 100644 index 0000000000000..91a0bbe36173f --- /dev/null +++ b/solution/2900-2999/2948.Make Lexicographically Smallest Array by Swapping Elements/README_EN.md @@ -0,0 +1,91 @@ +# [2948. Make Lexicographically Smallest Array by Swapping Elements](https://leetcode.com/problems/make-lexicographically-smallest-array-by-swapping-elements) + +[中文文档](/solution/2900-2999/2948.Make%20Lexicographically%20Smallest%20Array%20by%20Swapping%20Elements/README.md) + +## Description + +

You are given a 0-indexed array of positive integers nums and a positive integer limit.

+ +

In one operation, you can choose any two indices i and j and swap nums[i] and nums[j] if |nums[i] - nums[j]| <= limit.

+ +

Return the lexicographically smallest array that can be obtained by performing the operation any number of times.

+ +

An array a is lexicographically smaller than an array b if in the first position where a and b differ, array a has an element that is less than the corresponding element in b. For example, the array [2,10,3] is lexicographically smaller than the array [10,2,3] because they differ at index 0 and 2 < 10.

+ +

 

+

Example 1:

+ +
+Input: nums = [1,5,3,9,8], limit = 2
+Output: [1,3,5,8,9]
+Explanation: Apply the operation 2 times:
+- Swap nums[1] with nums[2]. The array becomes [1,3,5,9,8]
+- Swap nums[3] with nums[4]. The array becomes [1,3,5,8,9]
+We cannot obtain a lexicographically smaller array by applying any more operations.
+Note that it may be possible to get the same result by doing different operations.
+
+ +

Example 2:

+ +
+Input: nums = [1,7,6,18,2,1], limit = 3
+Output: [1,6,7,18,1,2]
+Explanation: Apply the operation 3 times:
+- Swap nums[1] with nums[2]. The array becomes [1,6,7,18,2,1]
+- Swap nums[0] with nums[4]. The array becomes [2,6,7,18,1,1]
+- Swap nums[0] with nums[5]. The array becomes [1,6,7,18,1,2]
+We cannot obtain a lexicographically smaller array by applying any more operations.
+
+ +

Example 3:

+ +
+Input: nums = [1,7,28,19,10], limit = 3
+Output: [1,7,28,19,10]
+Explanation: [1,7,28,19,10] is the lexicographically smallest array we can obtain because we cannot apply the operation on any two indices.
+
+ +

 

+

Constraints:

+ +
    +
  • 1 <= nums.length <= 105
  • +
  • 1 <= nums[i] <= 109
  • +
  • 1 <= limit <= 109
  • +
+ +## Solutions + + + +### **Python3** + +```python + +``` + +### **Java** + +```java + +``` + +### **C++** + +```cpp + +``` + +### **Go** + +```go + +``` + +### **...** + +``` + +``` + + diff --git a/solution/2900-2999/2949.Count Beautiful Substrings II/README.md b/solution/2900-2999/2949.Count Beautiful Substrings II/README.md new file mode 100644 index 0000000000000..900153ae072c1 --- /dev/null +++ b/solution/2900-2999/2949.Count Beautiful Substrings II/README.md @@ -0,0 +1,113 @@ +# [2949. 统计美丽子字符串 II](https://leetcode.cn/problems/count-beautiful-substrings-ii) + +[English Version](/solution/2900-2999/2949.Count%20Beautiful%20Substrings%20II/README_EN.md) + +## 题目描述 + + + +

给你一个字符串 s 和一个正整数 k

+ +

vowelsconsonants 分别表示字符串中元音字母和辅音字母的数量。

+ +

如果某个字符串满足以下条件,则称其为 美丽字符串

+ +
    +
  • vowels == consonants,即元音字母和辅音字母的数量相等。
  • +
  • (vowels * consonants) % k == 0,即元音字母和辅音字母的数量的乘积能被 k 整除。
  • +
+ +

返回字符串 s非空美丽子字符串 的数量。

+ +

子字符串是字符串中的一个连续字符序列。

+ +

英语中的 元音字母 'a''e''i''o''u'

+ +

英语中的 辅音字母 为除了元音字母之外的所有字母。

+ +

 

+ +

示例 1:

+ +
+输入:s = "baeyh", k = 2
+输出:2
+解释:字符串 s 中有 2 个美丽子字符串。
+- 子字符串 "baeyh",vowels = 2(["a","e"]),consonants = 2(["y","h"])。
+可以看出字符串 "aeyh" 是美丽字符串,因为 vowels == consonants 且 vowels * consonants % k == 0 。
+- 子字符串 "baeyh",vowels = 2(["a","e"]),consonants = 2(["b","y"])。
+可以看出字符串 "baey" 是美丽字符串,因为 vowels == consonants 且 vowels * consonants % k == 0 。
+可以证明字符串 s 中只有 2 个美丽子字符串。
+
+ +

示例 2:

+ +
+输入:s = "abba", k = 1
+输出:3
+解释:字符串 s 中有 3 个美丽子字符串。
+- 子字符串 "abba",vowels = 1(["a"]),consonants = 1(["b"])。
+- 子字符串 "abba",vowels = 1(["a"]),consonants = 1(["b"])。
+- 子字符串 "abba",vowels = 2(["a","a"]),consonants = 2(["b","b"])。
+可以证明字符串 s 中只有 3 个美丽子字符串。
+
+ +

示例 3:

+ +
+输入:s = "bcdf", k = 1
+输出:0
+解释:字符串 s 中没有美丽子字符串。
+
+ +

 

+ +

提示:

+ +
    +
  • 1 <= s.length <= 5 * 104
  • +
  • 1 <= k <= 1000
  • +
  • s 仅由小写英文字母组成。
  • +
+ +## 解法 + + + + + +### **Python3** + + + +```python + +``` + +### **Java** + + + +```java + +``` + +### **C++** + +```cpp + +``` + +### **Go** + +```go + +``` + +### **...** + +``` + +``` + + diff --git a/solution/2900-2999/2949.Count Beautiful Substrings II/README_EN.md b/solution/2900-2999/2949.Count Beautiful Substrings II/README_EN.md new file mode 100644 index 0000000000000..3071fcd40a06a --- /dev/null +++ b/solution/2900-2999/2949.Count Beautiful Substrings II/README_EN.md @@ -0,0 +1,103 @@ +# [2949. Count Beautiful Substrings II](https://leetcode.com/problems/count-beautiful-substrings-ii) + +[中文文档](/solution/2900-2999/2949.Count%20Beautiful%20Substrings%20II/README.md) + +## Description + +

You are given a string s and a positive integer k.

+ +

Let vowels and consonants be the number of vowels and consonants in a string.

+ +

A string is beautiful if:

+ +
    +
  • vowels == consonants.
  • +
  • (vowels * consonants) % k == 0, in other terms the multiplication of vowels and consonants is divisible by k.
  • +
+ +

Return the number of non-empty beautiful substrings in the given string s.

+ +

A substring is a contiguous sequence of characters in a string.

+ +

Vowel letters in English are 'a', 'e', 'i', 'o', and 'u'.

+ +

Consonant letters in English are every letter except vowels.

+ +

 

+

Example 1:

+ +
+Input: s = "baeyh", k = 2
+Output: 2
+Explanation: There are 2 beautiful substrings in the given string.
+- Substring "baeyh", vowels = 2 (["a",e"]), consonants = 2 (["y","h"]).
+You can see that string "aeyh" is beautiful as vowels == consonants and vowels * consonants % k == 0.
+- Substring "baeyh", vowels = 2 (["a",e"]), consonants = 2 (["b","y"]).
+You can see that string "baey" is beautiful as vowels == consonants and vowels * consonants % k == 0.
+It can be shown that there are only 2 beautiful substrings in the given string.
+
+ +

Example 2:

+ +
+Input: s = "abba", k = 1
+Output: 3
+Explanation: There are 3 beautiful substrings in the given string.
+- Substring "abba", vowels = 1 (["a"]), consonants = 1 (["b"]).
+- Substring "abba", vowels = 1 (["a"]), consonants = 1 (["b"]).
+- Substring "abba", vowels = 2 (["a","a"]), consonants = 2 (["b","b"]).
+It can be shown that there are only 3 beautiful substrings in the given string.
+
+ +

Example 3:

+ +
+Input: s = "bcdf", k = 1
+Output: 0
+Explanation: There are no beautiful substrings in the given string.
+
+ +

 

+

Constraints:

+ +
    +
  • 1 <= s.length <= 5 * 104
  • +
  • 1 <= k <= 1000
  • +
  • s consists of only English lowercase letters.
  • +
+ +## Solutions + + + +### **Python3** + +```python + +``` + +### **Java** + +```java + +``` + +### **C++** + +```cpp + +``` + +### **Go** + +```go + +``` + +### **...** + +``` + +``` + + diff --git a/solution/CONTEST_README.md b/solution/CONTEST_README.md index 1ff3c9791e48a..0f7580098c20c 100644 --- a/solution/CONTEST_README.md +++ b/solution/CONTEST_README.md @@ -22,6 +22,13 @@ ## 往期竞赛 +#### 第 373 场周赛(2023-11-26 10:30, 90 分钟) 参赛人数 3577 + +- [2946. 循环移位后的矩阵相似检查](/solution/2900-2999/2946.Matrix%20Similarity%20After%20Cyclic%20Shifts/README.md) +- [2947. 统计美丽子字符串 I](/solution/2900-2999/2947.Count%20Beautiful%20Substrings%20I/README.md) +- [2948. 交换得到字典序最小的数组](/solution/2900-2999/2948.Make%20Lexicographically%20Smallest%20Array%20by%20Swapping%20Elements/README.md) +- [2949. 统计美丽子字符串 II](/solution/2900-2999/2949.Count%20Beautiful%20Substrings%20II/README.md) + #### 第 118 场双周赛(2023-11-25 22:30, 90 分钟) 参赛人数 2425 - [2942. 查找包含给定字符的单词](/solution/2900-2999/2942.Find%20Words%20Containing%20Character/README.md) diff --git a/solution/CONTEST_README_EN.md b/solution/CONTEST_README_EN.md index f38068db63e0d..8afc30b26e3b3 100644 --- a/solution/CONTEST_README_EN.md +++ b/solution/CONTEST_README_EN.md @@ -25,6 +25,13 @@ Get your rating changes right after the completion of LeetCode contests, https:/ ## Past Contests +#### Weekly Contest 373 + +- [2946. Matrix Similarity After Cyclic Shifts](/solution/2900-2999/2946.Matrix%20Similarity%20After%20Cyclic%20Shifts/README_EN.md) +- [2947. Count Beautiful Substrings I](/solution/2900-2999/2947.Count%20Beautiful%20Substrings%20I/README_EN.md) +- [2948. Make Lexicographically Smallest Array by Swapping Elements](/solution/2900-2999/2948.Make%20Lexicographically%20Smallest%20Array%20by%20Swapping%20Elements/README_EN.md) +- [2949. Count Beautiful Substrings II](/solution/2900-2999/2949.Count%20Beautiful%20Substrings%20II/README_EN.md) + #### Biweekly Contest 118 - [2942. Find Words Containing Character](/solution/2900-2999/2942.Find%20Words%20Containing%20Character/README_EN.md) diff --git a/solution/README.md b/solution/README.md index 651981efc5cd4..ae4a38f871961 100644 --- a/solution/README.md +++ b/solution/README.md @@ -2956,6 +2956,10 @@ | 2943 | [最大化网格图中正方形空洞的面积](/solution/2900-2999/2943.Maximize%20Area%20of%20Square%20Hole%20in%20Grid/README.md) | | 中等 | 第 118 场双周赛 | | 2944 | [购买水果需要的最少金币数](/solution/2900-2999/2944.Minimum%20Number%20of%20Coins%20for%20Fruits/README.md) | | 中等 | 第 118 场双周赛 | | 2945 | [找到最大非递减数组的长度](/solution/2900-2999/2945.Find%20Maximum%20Non-decreasing%20Array%20Length/README.md) | | 困难 | 第 118 场双周赛 | +| 2946 | [循环移位后的矩阵相似检查](/solution/2900-2999/2946.Matrix%20Similarity%20After%20Cyclic%20Shifts/README.md) | | 简单 | 第 373 场周赛 | +| 2947 | [统计美丽子字符串 I](/solution/2900-2999/2947.Count%20Beautiful%20Substrings%20I/README.md) | | 中等 | 第 373 场周赛 | +| 2948 | [交换得到字典序最小的数组](/solution/2900-2999/2948.Make%20Lexicographically%20Smallest%20Array%20by%20Swapping%20Elements/README.md) | | 中等 | 第 373 场周赛 | +| 2949 | [统计美丽子字符串 II](/solution/2900-2999/2949.Count%20Beautiful%20Substrings%20II/README.md) | | 困难 | 第 373 场周赛 | ## 版权 diff --git a/solution/README_EN.md b/solution/README_EN.md index 557af085ee4f1..18ad5c812ecbd 100644 --- a/solution/README_EN.md +++ b/solution/README_EN.md @@ -2954,6 +2954,10 @@ Press Control + F(or Command + F on | 2943 | [Maximize Area of Square Hole in Grid](/solution/2900-2999/2943.Maximize%20Area%20of%20Square%20Hole%20in%20Grid/README_EN.md) | | Medium | Biweekly Contest 118 | | 2944 | [Minimum Number of Coins for Fruits](/solution/2900-2999/2944.Minimum%20Number%20of%20Coins%20for%20Fruits/README_EN.md) | | Medium | Biweekly Contest 118 | | 2945 | [Find Maximum Non-decreasing Array Length](/solution/2900-2999/2945.Find%20Maximum%20Non-decreasing%20Array%20Length/README_EN.md) | | Hard | Biweekly Contest 118 | +| 2946 | [Matrix Similarity After Cyclic Shifts](/solution/2900-2999/2946.Matrix%20Similarity%20After%20Cyclic%20Shifts/README_EN.md) | | Easy | Weekly Contest 373 | +| 2947 | [Count Beautiful Substrings I](/solution/2900-2999/2947.Count%20Beautiful%20Substrings%20I/README_EN.md) | | Medium | Weekly Contest 373 | +| 2948 | [Make Lexicographically Smallest Array by Swapping Elements](/solution/2900-2999/2948.Make%20Lexicographically%20Smallest%20Array%20by%20Swapping%20Elements/README_EN.md) | | Medium | Weekly Contest 373 | +| 2949 | [Count Beautiful Substrings II](/solution/2900-2999/2949.Count%20Beautiful%20Substrings%20II/README_EN.md) | | Hard | Weekly Contest 373 | ## Copyright diff --git a/solution/summary.md b/solution/summary.md index 3965b3aa48d51..256bad0d309f1 100644 --- a/solution/summary.md +++ b/solution/summary.md @@ -3003,3 +3003,7 @@ - [2943.最大化网格图中正方形空洞的面积](/solution/2900-2999/2943.Maximize%20Area%20of%20Square%20Hole%20in%20Grid/README.md) - [2944.购买水果需要的最少金币数](/solution/2900-2999/2944.Minimum%20Number%20of%20Coins%20for%20Fruits/README.md) - [2945.找到最大非递减数组的长度](/solution/2900-2999/2945.Find%20Maximum%20Non-decreasing%20Array%20Length/README.md) + - [2946.循环移位后的矩阵相似检查](/solution/2900-2999/2946.Matrix%20Similarity%20After%20Cyclic%20Shifts/README.md) + - [2947.统计美丽子字符串 I](/solution/2900-2999/2947.Count%20Beautiful%20Substrings%20I/README.md) + - [2948.交换得到字典序最小的数组](/solution/2900-2999/2948.Make%20Lexicographically%20Smallest%20Array%20by%20Swapping%20Elements/README.md) + - [2949.统计美丽子字符串 II](/solution/2900-2999/2949.Count%20Beautiful%20Substrings%20II/README.md) diff --git a/solution/summary_en.md b/solution/summary_en.md index 855df355b87e1..a0318b11865c9 100644 --- a/solution/summary_en.md +++ b/solution/summary_en.md @@ -3003,3 +3003,7 @@ - [2943.Maximize Area of Square Hole in Grid](/solution/2900-2999/2943.Maximize%20Area%20of%20Square%20Hole%20in%20Grid/README_EN.md) - [2944.Minimum Number of Coins for Fruits](/solution/2900-2999/2944.Minimum%20Number%20of%20Coins%20for%20Fruits/README_EN.md) - [2945.Find Maximum Non-decreasing Array Length](/solution/2900-2999/2945.Find%20Maximum%20Non-decreasing%20Array%20Length/README_EN.md) + - [2946.Matrix Similarity After Cyclic Shifts](/solution/2900-2999/2946.Matrix%20Similarity%20After%20Cyclic%20Shifts/README_EN.md) + - [2947.Count Beautiful Substrings I](/solution/2900-2999/2947.Count%20Beautiful%20Substrings%20I/README_EN.md) + - [2948.Make Lexicographically Smallest Array by Swapping Elements](/solution/2900-2999/2948.Make%20Lexicographically%20Smallest%20Array%20by%20Swapping%20Elements/README_EN.md) + - [2949.Count Beautiful Substrings II](/solution/2900-2999/2949.Count%20Beautiful%20Substrings%20II/README_EN.md) From f86ae5d261dd26797ddb71fa56e768c8e71de8c1 Mon Sep 17 00:00:00 2001 From: Doocs Bot Date: Sun, 26 Nov 2023 13:21:24 +0800 Subject: [PATCH 2/2] Optimised images with calibre/image-actions --- .../images/similarmatrix.png | Bin 29748 -> 13645 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/images/similarmatrix.png b/solution/2900-2999/2946.Matrix Similarity After Cyclic Shifts/images/similarmatrix.png index fac6c826cc18ce9133d1154ff1a95f6a79704abb..7e3eebe38965b597552abbd87f2e5d52789fce0d 100644 GIT binary patch literal 13645 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 J?(siw{ujA&_?Q3y literal 29748 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 OJ5Vax%K1uHuKz!6hvg3d