|
10365 | 10365 | <ul class="md-nav__list">
|
10366 | 10366 |
|
10367 | 10367 | <li class="md-nav__item">
|
10368 |
| - <a href="#solution-1" class="md-nav__link"> |
| 10368 | + <a href="#solution-1-dynamic-programming" class="md-nav__link"> |
10369 | 10369 | <span class="md-ellipsis">
|
10370 |
| - Solution 1 |
| 10370 | + Solution 1: Dynamic Programming |
10371 | 10371 | </span>
|
10372 | 10372 | </a>
|
10373 | 10373 |
|
@@ -86546,7 +86546,15 @@ <h2 id="description">Description</h2>
|
86546 | 86546 | <h2 id="solutions">Solutions</h2>
|
86547 | 86547 | <!-- solution:start -->
|
86548 | 86548 |
|
86549 |
| -<h3 id="solution-1">Solution 1</h3> |
| 86549 | +<h3 id="solution-1-dynamic-programming">Solution 1: Dynamic Programming</h3> |
| 86550 | +<p>First, we preprocess the string <span class="arithmatex">\(s\)</span> to determine whether each substring <span class="arithmatex">\(s[i..j]\)</span> is a palindrome, and record this in a 2D array <span class="arithmatex">\(g[i][j]\)</span>, where <span class="arithmatex">\(g[i][j]\)</span> indicates whether the substring <span class="arithmatex">\(s[i..j]\)</span> is a palindrome.</p> |
| 86551 | +<p>Next, we define <span class="arithmatex">\(f[i]\)</span> to represent the minimum number of cuts needed for the substring <span class="arithmatex">\(s[0..i-1]\)</span>. Initially, <span class="arithmatex">\(f[i] = i\)</span>.</p> |
| 86552 | +<p>Next, we consider how to transition the state for <span class="arithmatex">\(f[i]\)</span>. We can enumerate the previous cut point <span class="arithmatex">\(j\)</span>. If the substring <span class="arithmatex">\(s[j..i]\)</span> is a palindrome, then <span class="arithmatex">\(f[i]\)</span> can be transitioned from <span class="arithmatex">\(f[j]\)</span>. If <span class="arithmatex">\(j = 0\)</span>, it means that <span class="arithmatex">\(s[0..i]\)</span> itself is a palindrome, and no cuts are needed, i.e., <span class="arithmatex">\(f[i] = 0\)</span>. Therefore, the state transition equation is as follows:</p> |
| 86553 | +<div class="arithmatex">\[ |
| 86554 | +f[i] = \min_{0 \leq j \leq i} \begin{cases} f[j-1] + 1, & \textit{if}\ g[j][i] = \textit{True} \\ 0, & \textit{if}\ g[0][i] = \textit{True} \end{cases} |
| 86555 | +\]</div> |
| 86556 | +<p>The answer is <span class="arithmatex">\(f[n]\)</span>, where <span class="arithmatex">\(n\)</span> is the length of the string <span class="arithmatex">\(s\)</span>.</p> |
| 86557 | +<p>The time complexity is <span class="arithmatex">\(O(n^2)\)</span>, and the space complexity is <span class="arithmatex">\(O(n^2)\)</span>. Here, <span class="arithmatex">\(n\)</span> is the length of the string <span class="arithmatex">\(s\)</span>.</p> |
86550 | 86558 | <div class="tabbed-set tabbed-alternate" data-tabs="1:6"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Python3</label><label for="__tabbed_1_2">Java</label><label for="__tabbed_1_3">C++</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">TypeScript</label><label for="__tabbed_1_6">C#</label></div>
|
86551 | 86559 | <div class="tabbed-content">
|
86552 | 86560 | <div class="tabbed-block">
|
@@ -86757,23 +86765,15 @@ <h3 id="solution-1">Solution 1</h3>
|
86757 | 86765 | <span class="normal">15</span>
|
86758 | 86766 | <span class="normal">16</span>
|
86759 | 86767 | <span class="normal">17</span>
|
86760 |
| -<span class="normal">18</span> |
86761 |
| -<span class="normal">19</span> |
86762 |
| -<span class="normal">20</span> |
86763 |
| -<span class="normal">21</span> |
86764 |
| -<span class="normal">22</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">minCut</span><span class="p">(</span><span class="nx">s</span><span class="o">:</span><span class="w"> </span><span class="kt">string</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">{</span> |
| 86768 | +<span class="normal">18</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">minCut</span><span class="p">(</span><span class="nx">s</span><span class="o">:</span><span class="w"> </span><span class="kt">string</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">{</span> |
86765 | 86769 | <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">s</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span>
|
86766 |
| -<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">g</span><span class="o">:</span><span class="w"> </span><span class="kt">boolean</span><span class="p">[][]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="nx">n</span><span class="p">)</span> |
86767 |
| -<span class="w"> </span><span class="p">.</span><span class="nx">fill</span><span class="p">(</span><span class="mf">0</span><span class="p">)</span> |
86768 |
| -<span class="w"> </span><span class="p">.</span><span class="nx">map</span><span class="p">(()</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="nx">n</span><span class="p">).</span><span class="nx">fill</span><span class="p">(</span><span class="kc">true</span><span class="p">));</span> |
| 86770 | +<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">g</span><span class="o">:</span><span class="w"> </span><span class="kt">boolean</span><span class="p">[][]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">.</span><span class="kr">from</span><span class="p">({</span><span class="w"> </span><span class="nx">length</span><span class="o">:</span><span class="w"> </span><span class="kt">n</span><span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="nx">n</span><span class="p">).</span><span class="nx">fill</span><span class="p">(</span><span class="kc">true</span><span class="p">));</span> |
86769 | 86771 | <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">n</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span><span class="w"> </span><span class="o">~</span><span class="nx">i</span><span class="p">;</span><span class="w"> </span><span class="o">--</span><span class="nx">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
86770 | 86772 | <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span><span class="w"> </span><span class="nx">j</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">n</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="nx">j</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
86771 | 86773 | <span class="w"> </span><span class="nx">g</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="nx">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">j</span><span class="p">]</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nx">g</span><span class="p">[</span><span class="nx">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">][</span><span class="nx">j</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">1</span><span class="p">];</span>
|
86772 | 86774 | <span class="w"> </span><span class="p">}</span>
|
86773 | 86775 | <span class="w"> </span><span class="p">}</span>
|
86774 |
| -<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">f</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="nx">n</span><span class="p">)</span> |
86775 |
| -<span class="w"> </span><span class="p">.</span><span class="nx">fill</span><span class="p">(</span><span class="mf">0</span><span class="p">)</span> |
86776 |
| -<span class="w"> </span><span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">_</span><span class="p">,</span><span class="w"> </span><span class="nx">i</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nx">i</span><span class="p">);</span> |
| 86776 | +<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">f</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">.</span><span class="kr">from</span><span class="p">({</span><span class="w"> </span><span class="nx">length</span><span class="o">:</span><span class="w"> </span><span class="kt">n</span><span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="p">(</span><span class="nx">_</span><span class="p">,</span><span class="w"> </span><span class="nx">i</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nx">i</span><span class="p">);</span> |
86777 | 86777 | <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">n</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="nx">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
86778 | 86778 | <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span><span class="w"> </span><span class="nx">j</span><span class="w"> </span><span class="o"><=</span><span class="w"> </span><span class="nx">i</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="nx">j</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
86779 | 86779 | <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">g</span><span class="p">[</span><span class="nx">j</span><span class="p">][</span><span class="nx">i</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
|
|
0 commit comments