这个类型的题目各式各样的,好多。

409. 最长回文串

这算哪门子贪心?

  1. var longestPalindrome = function(s) {
  2. let map = new Map();
  3. for (let char of s) {
  4. map.set(char, (map.get(char) || 0) + 1);
  5. }
  6. let totalNum = 0;
  7. let oddNum = 0;
  8. let hasOdd = false;
  9. for (let [key, value] of map) {
  10. if (value % 2) { // 奇数
  11. oddNum += value - 1;
  12. hasOdd = true;
  13. } else {
  14. totalNum += value;
  15. }
  16. }
  17. hasOdd && oddNum++; // 所有的奇数和 统一 加1
  18. totalNum += oddNum;
  19. return totalNum;
  20. };

image.png

  1. var longestPalindrome = function(s) {
  2. let map = new Map();
  3. for (let char of s) {
  4. map.set(char, (map.get(char) || 0) + 1);
  5. }
  6. let totalNum = 0;
  7. for (let [key, value] of map) {
  8. if (totalNum % 2 === 0) {
  9. if (value % 2 === 1) {
  10. totalNum += value
  11. } else {
  12. totalNum += Math.floor(value / 2) * 2;
  13. }
  14. } else {
  15. totalNum += Math.floor(value / 2) * 2;
  16. }
  17. }
  18. return totalNum;
  19. };

写法优化:

  1. var longestPalindrome = function(s) {
  2. let map = new Map();
  3. for (let char of s) {
  4. map.set(char, (map.get(char) || 0) + 1);
  5. }
  6. let totalNum = 0;
  7. for (let [key, value] of map) {
  8. if ((totalNum % 2 === 0) && (value % 2 === 1)) {
  9. totalNum += value;
  10. } else {
  11. totalNum += Math.floor(value / 2) * 2;
  12. }
  13. }
  14. return totalNum;
  15. };

5. 最长回文子串

最长公共子串