zoukankan      html  css  js  c++  java
  • (Good topic)哈希表:最长回文串(3.19 leetcode每日打卡)

    给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

    在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

    注意:
    假设字符串的长度不会超过 1010。

    示例 1:

    输入:
    "abccccdd"
    
    输出:
    7
    
    解释:
    我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

    解题思路

    要想构成回文串,则字符串总就有且仅有一个奇数串,前几天做了那个单词的题,用的哈希表,这个还是用哈希表,用定义一个hash数组来存储小写和大写字母,然后遍历hash数组,遇到偶数直接计入回文串长度,遇到奇数再存入一个tem数组记录,最后比较tem数组中最大长度的奇数串

    计入回文串长度还有一个最重要的就是,其余的长度的奇数串不能都舍去,需要减一计入回文串长度。

     1 int longestPalindrome(char* s)
     2 {
     3     int hash[52] = { 0 };
     4     int tem[1000] = { 0 };  //用来记录奇数最大数值
     5     int cnt = 0;
     6     int i, j = -1;
     7 
     8     for (i = 0; s[i]; i++)
     9     {
    10         if (s[i] >= 'a' && s[i] <= 'z')
    11         {
    12             hash[s[i] - 97]++;
    13         }
    14         else
    15         {
    16             hash[s[i] - 39]++;
    17         }
    18     }
    19 
    20     for (i = 0; i < 52; i++)
    21     {
    22         if (hash[i] % 2 == 0)
    23         {
    24             cnt += hash[i];
    25         }
    26         else if (hash[i] % 2 != 0) // 记录非偶数
    27         {
    28             tem[++j] = hash[i];
    29         }
    30     }
    31 
    32     int max;
    33     int symbol; //记录最长计数串的下标
    34     max = tem[0];  //最长的奇数串
    35     symbol = 0;
    36     for (i = 1; i < j+1; i++)
    37     {
    38         if (tem[i] > max)
    39         {
    40             max = tem[i];
    41             symbol = i;
    42         }
    43     }
    44 
    45     //printf("%d", symbol);
    46     for (i = 0; i < j + 1; i++)
    47     {
    48         if (i != symbol)
    49         {
    50             cnt = cnt + tem[i] - 1;
    51         }
    52     }
    53     return cnt + max;
    54 }
     
     
  • 相关阅读:
    mysql 触发器
    Yii 1.0 基础
    python解释执行原理(转载)
    python中使用selenium调用Firefox缺少geckodriver解决方法
    Python中os和shutil模块实用方法集锦
    pytesseract使用
    anaconda安装第三方库
    anaconda spyder异常如何重新启动
    windows下python3.6 32bit 安装django
    设置SO_RECVBUF和SO_SENDBUF套接字选项
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12522130.html
Copyright © 2011-2022 走看看