psd面試

鏈接:https://www.nowcoder.com/acm/contest/90/D
來源:牛客網

題目描述

掌握未來命運的女神 psd 師兄在拿了朝田詩乃的 buff 後決定去實習。
埃森哲公司註冊成立於愛爾蘭,是一家全球領先的專業服務公司,爲客戶提供戰略、諮詢、數字、技術和運營服務及解決方案。他們立足商業與技術的前沿,業務涵蓋40多個行業,以及企業日常運營部門的各個職能。憑藉獨特的業內經驗與專業技能,以及翹楚全球的交付網絡,他們幫助客戶提升績效,併爲利益相關方持續創造價值。埃森哲是《財富》全球500強企業之一,目前擁有約41.1萬名員工,服務於120多個國家的客戶。於是psd打算去埃森哲公司投一下簡歷。
於是他用英文寫了一篇簡歷,由於手速太快了以致自己都不知道寫了什麼。
然而面試官 xwc 一眼就看到了重點:大學打過 ACM!
xwc:“
    聽說你很低襖?考你個題:
    忽略字母大小寫,你這篇簡歷去掉最長的迴文子序列後還有多長?

psd 順手就把這個問題拋給了你。

輸入描述:

多組輸入,每組輸入一個長度不超過 1234 的沒空格的字符串,是 psd 的簡歷。

輸出描述:

每組輸出一個整數,如題。

這個題目看似很長,其實重要的話就兩行!

這個題的核心思想就是就最長公共子序列,輸入一個字符串然後與他的另一個逆序字符串進行對比,找出它們的最長公共子序列就OK了!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
int dp[1300][1300];
int lcs(string str1, string str2)
{
    int len1 = str1.length();
    int len2 = str2.length();
    memset(dp,0,sizeof(dp));
    for(int i = 1; i <= len1; i++)
    {
        for(int j = 1; j <= len2; j++)
        {
            if(str1[i-1] == str2[j-1])
            {
                dp[i][j] = dp[i-1][j-1] + 1;
            }
            else
            {
                dp[i][j] = max(dp[i][j-1],dp[i-1][j]);
            }
        }
    }
    return dp[len1][len2];
}

int main()
{
    string str1 = "abdcd";
    string str2 = "baced";
    while(cin>>str1)
    {
        int len = str1.length();
        for(int i = 0; i < len; i++)
        {
            if(str1[i] >= 'A' && str1[i] <= 'Z')
            {
                str1[i] = str1[i] + 32;
            }
        }
        str2 = str1;
        int cnt = len-1;
        for(int i = 0; i < len; i++)
        {
            str2[cnt--] = str1[i];
        }
        cout << len - lcs(str1,str2) << endl;
    }
    return 0;
}

發佈了35 篇原創文章 · 獲贊 14 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章