409:最长回文串
This commit is contained in:
parent
a91b04edf1
commit
a46b03698b
62
src/main/java/leetcode/editor/cn/LongestPalindrome.java
Normal file
62
src/main/java/leetcode/editor/cn/LongestPalindrome.java
Normal file
@ -0,0 +1,62 @@
|
||||
//给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。
|
||||
//
|
||||
// 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。
|
||||
//
|
||||
//
|
||||
//
|
||||
// 示例 1:
|
||||
//
|
||||
//
|
||||
//输入:s = "abccccdd"
|
||||
//输出:7
|
||||
//解释:
|
||||
//我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
|
||||
//
|
||||
//
|
||||
// 示例 2:
|
||||
//
|
||||
//
|
||||
//输入:s = "a"
|
||||
//输入:1
|
||||
//
|
||||
//
|
||||
// 示例 3:
|
||||
//
|
||||
//
|
||||
//输入:s = "bb"
|
||||
//输入: 2
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// 提示:
|
||||
//
|
||||
//
|
||||
// 1 <= s.length <= 2000
|
||||
// s 只能由小写和/或大写英文字母组成
|
||||
//
|
||||
// Related Topics 贪心 哈希表 字符串 👍 393 👎 0
|
||||
|
||||
package leetcode.editor.cn;
|
||||
|
||||
//409:最长回文串
|
||||
public class LongestPalindrome {
|
||||
public static void main(String[] args) {
|
||||
Solution solution = new LongestPalindrome().new Solution();
|
||||
|
||||
}
|
||||
|
||||
//leetcode submit region begin(Prohibit modification and deletion)
|
||||
class Solution {
|
||||
public int longestPalindrome(String s) {
|
||||
int[] letters = new int[128];
|
||||
char[] arr = s.toCharArray();
|
||||
for (char c : arr) letters[c]++;
|
||||
int res = 0;
|
||||
for (int i : letters) res += i - (i % 2);
|
||||
return res == arr.length ? res : res + 1;
|
||||
}
|
||||
}
|
||||
//leetcode submit region end(Prohibit modification and deletion)
|
||||
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
<p>给定一个包含大写字母和小写字母的字符串<meta charset="UTF-8" /> <code>s</code> ,返回 <em>通过这些字母构造成的 <strong>最长的回文串</strong></em> 。</p>
|
||||
|
||||
<p>在构造过程中,请注意 <strong>区分大小写</strong> 。比如 <code>"Aa"</code> 不能当做一个回文字符串。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1: </strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>s = "abccccdd"
|
||||
<strong>输出:</strong>7
|
||||
<strong>解释:</strong>
|
||||
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>s = "a"
|
||||
<strong>输入:</strong>1
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 3:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>s = "bb"
|
||||
<strong>输入:</strong> 2
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= s.length <= 2000</code></li>
|
||||
<li><code>s</code> 只能由小写和/或大写英文字母组成</li>
|
||||
</ul>
|
||||
<div><div>Related Topics</div><div><li>贪心</li><li>哈希表</li><li>字符串</li></div></div><br><div><li>👍 393</li><li>👎 0</li></div>
|
@ -0,0 +1,25 @@
|
||||
首先计算每个字符出现的次数
|
||||
|
||||
每有两个同样的字符,就可以放在结果的回文两端,长度便可以 $+2$
|
||||
|
||||
当最后得到的回文的长度跟 $s$ 一样长时,说明每个字符都出现了 $2n$ 遍,即每个字符都已经被使用
|
||||
|
||||
如果长度不等于 $s$, 说明至少有一个字符单独出现,将它放在回文中间使结果的长度 $+1$
|
||||
|
||||
* []
|
||||
|
||||
```Java
|
||||
class Solution {
|
||||
public int longestPalindrome(String s) {
|
||||
int[] letters = new int[128];
|
||||
char[] arr = s.toCharArray();
|
||||
for(char c : arr) letters[c]++;
|
||||
|
||||
int res = 0;
|
||||
for(int i : letters) res += i - (i % 2);
|
||||
|
||||
return res == arr.length ? res : res + 1;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user