1. 程式人生 > >c++ code: 最長迴文串

c++ code: 最長迴文串

給出一個包含大小寫字母的字串。求出由這些字母構成的最長的迴文串的長度是多少。資料是大小寫敏感的,也就是說,"Aa" 並不會被認為是一個迴文串。 注意事項假設字串的長度不會超過 1010。您在真實的面試中是否遇到過這個題? Yes樣例給出 s = "abccccdd" 返回 7一種可以構建出來的最長迴文串方案是 "dccaccd"。class Solution {public: /** * @param s a string which consists of lowercase or uppercase letters * @return the length of the longest palindromes that can be built */ int longestPalindrome(string& s) { // Write your code heretypedef struct _mapval{bool isEven;int count; //字元數量}mapval;if(s.size() <= 0 ) return 0; mapphone2intmap;char *phones = new char [s.size()+1];memset(phones, 0, s.size()+1);strcpy(phones, s.c_str());char *tmpphone = phones;while(*tmpphone != '\0'){map::iterator it = phone2intmap.find(*tmpphone);if(it != phone2intmap.end()){it->second.isEven = (it->second.isEven == true)?false:true;it->second.count += 1;phone2intmap[it->first] = it->second;}else{mapval curval;curval.isEven = false;curval.count = 1;phone2intmap.insert(make_pair(*tmpphone, curval));}tmpphone++;}delete []phones;int sumEvenNum = 0;int sumOddNum = 0;int oddMaxLen = 0;bool flag = false;map::iterator it = phone2intmap.begin();while(it != phone2intmap.end()){if(it->second.isEven) sumEvenNum += it->second.count;else{flag = true;if(it->second.count > 2) sumOddNum += it->second.count - 1; }phone2intmap.erase(it++);}sumOddNum += (true == flag) ? 1 : 0;return (sumEvenNum + sumOddNum); }};

相關推薦

c++ code:

給出一個包含大小寫字母的字串。求出由這些字母構成的最長的迴文串的長度是多少。資料是大小寫敏感的,也就是說,"Aa" 並不會被認為是一個迴文串。 注意事項假設字串的長度不會超過 1010。您在真實的面試中是否遇到過這個題

LeetCode 409. CC++、python)

給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。 在構造過程中,請注意區分大小寫。比如 "Aa" 不能當做一個迴文字串。 注意: 假設字串的長度不會超過 1010。 示例 1: 輸入: "abccccdd" 輸出: 7 解釋:

leetcode 求

題目:Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.         樣例

演算法 -- 四種方法獲取的”,並對時間複雜進行分析對比&PHP

迴文串: “迴文串”是一個正讀和反讀都一樣的字串,比如“level”或者“noon”等等就是迴文串。 -- 來自百度百科 關於獲取字串中最長的迴文串的演算法中,目前有很多演算法,本文中主要是用PHP來實現的演算法之一。 演算法一:暴力解法 暴力計算出所有的字串並判斷。時間複雜

【3068 HDU】

題目:點選開啟題目連結 思路:這題要用到迴文串匹配的知識點。我們之前遇到這種題傳統思想就是分奇數和偶數情況進行暴力,從前往後遍歷每一個字元,然後以該字元為中心向兩邊查詢,但這樣的時間複雜度很高,是O(n^2),提交的話,肯定會wa。這裡介紹一種新的演算法,Manacher演算法。 Manac

LeetCode---409.

題目連結:https://leetcode-cn.com/problems/longest-palindrome/description/ 題目描述:  演算法描述: 分析下題目我們可以容易知道,只要某個字元的個數為偶數個的時候,那麼這些字元一定可以構成迴文數(因為題目沒

【LeetCode】 409.

1.題目 給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。 在構造過程中,請注意區分大小寫。比如 “Aa” 不能當做一個迴文字串。 注意: 假設字串的長度不會超過 1010。 2.思路 建立map存放26個大小寫字母的數量; 如果該字

409.

給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。 在構造過程中,請注意區分大小寫。比如 "Aa" 不能當做一個迴文字串。 注意: 假設字串的長度不會超過 1010。 示例 1: 輸入:"abccccdd" 輸出:7 解釋: 我們可以構造

【LeetCode 簡單題】91-

宣告: 今天是第91道題。給定一個包含大寫字母和小寫字母的字串,找到可由這些字母構造成的最長的迴文串。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除 (手動比心ღ( ´・ᴗ・` ))

求字串中的長度 manacher演算法 模板

https://www.luogu.org/problemnew/show/P3805 #include<bits/stdc++.h> using namespace std; const int maxn=11000002; char S[maxn<<1];

O(n)的manacher演算法

參考以下兩篇文章。。。 一篇程式碼清晰  一篇解析明確。。 http://blog.sina.com.cn/s/blog_70811e1a01014esn.html http://wenku.baidu.com/link?url=kX7ZdfzHW7SM0cE8Vv

leetcode 409.

給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。 在構造過程中,請注意區分大小寫。比如 "Aa" 不能當做一個迴文字串。 注意: 假設字串的長度不會超過 1010。 示

manacher演算法(

這是建立部落格記錄的第一個程式碼。 題目解釋:     子串:小於等於原字串長度由原字串中任意個連續字元組成的子序列     迴文:關於中間字元對稱的文法,即“aba”(單核)、“cabbac”(雙核)等     最長迴文子串:1.尋找回文子串;2.該子串是迴文子串中

在一個字串中找出

如何高效的在一個字串中找到最長的迴文串呢?下面我們根據程式碼來分析 首先,迴文串有兩種,一種是字串的長度是偶數,另一種就是奇數。 我們從字串第二個字元開始,同樣我們把當前起始字元叫做k 先檢驗奇數長度的字串,對比該字元的前一個和後一個(k -

lintcode 627 Python版本

Cottbuser 灣區人工智慧 今天 作者:Cottbuser 會多國語言的海歸  公眾號:灣區人工智慧 微博:灣區人工智慧 知乎:灣區人工智慧 AI QQ群:604562980 一線人工智慧工程師獨立兼職運營 如果本文對你有幫助,歡迎點贊,轉發 資料結構和演算法分

-manacher演算法模板

給出一個只由小寫英文字元a,b,c...y,z組成的字串S,求S中最長迴文串的長度.  迴文就是正反讀都是一樣的字串,如aba, abba等 Input 輸入有多組case,不超過120組,每組輸入為一行小寫英文字元a,b,c...y,z組成的字串S  兩組case之間由

(leetcode簡單篇四百零九題)

給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。 在構造過程中,請注意區分大小寫。比如 “Aa” 不能當做一個迴文字串。 注意: 假設字串的長度不會超過 1010。 示例 1: 輸入: “abccccdd” 輸出:

409,

給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。 在構造過程中,請注意區分大小寫。比如 "Aa" 不能當做一個迴文字串。 注意: 假設字串的長度不會超過 1010。 示例 1: 輸入: "abccccdd" 輸出: 7 解釋: 我們可以

BZOJ 2565

傳送門 迴文自動機! 正著跑一遍 記錄以每個點作為迴文子串的右端點的最大長度 倒過來跑一遍 記錄每個點作為左端點的最大長度 求個和就好啦 附程式碼。 #include<cstdio> #include<cstring> #include<al

HDU3068-manacher演算法-

https://vjudge.net/problem/HDU-3068 求最長的迴文串。 有一次用dp求過一次。 :我們都知道求迴文串可以依賴於暴力的方法(以某點為重心,暴力的比唄),manach