第13屆景馳-埃森哲杯廣東工業大學ACM程序設計大賽--D-psd面試

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

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

    psd 順手就把這個問題拋給了你。
    輸入描述:
    多組輸入,每組輸入一個長度不超過 1234 的沒空格的字符串,是 psd 的簡歷。
    輸出描述:
    每組輸出一個整數,如題。
    示例1
    輸入
    google
    輸出
    2
    示例2
    輸入
    aBc,bAd
    輸出
    2
  • 2.題目分析
    題目我已經無力吐槽了,這個廣告打的真是毫無痕跡Orz,有用的就一句話。
    好吧,這個讓咱們求的就是一個字符串忽略字母大小寫,去掉最長的迴文子序列後的長度。
    首先把字符串統一成大寫或者小寫,而後把原字符串反轉後存下來,接下來就是求這兩個字符串的最長公共子序列(LCS)了,求完以後拿長度減去LCS的長度就是答案了。
  • 3.代碼以下
#include<cstdio> 
#include<cstring> 
#include<algorithm> 
#include<iostream> 
#include<string> 
#include<vector> 
#include<stack> 
#include<bitset> 
#include<cstdlib> 
#include<cmath> 
#include<set> 
#include<list> 
#include<deque> 
#include<map> 
#include<queue>
#include<algorithm> 
using namespace std; 
typedef long long ll; 
const double PI = acos(-1.0); 
const double eps = 1e-6; 
const int INF = 1000000000; 
const int maxn = 100; 
char str1[2000],s2[2000];
int dp[2000][2000];
int main()
{  
    while(cin>>str1)
    {
        int l=strlen(str1),to=0;
        for(int i=0;str1[i];i++)
        {
            if(str1[i]>='a'&&str1[i]<='z')
            str1[i]=str1[i]-'a'+'A';
        }
        for(int i=l-1;i>=0;i--)
        {
            s2[to++]=str1[i];
        }
        s2[to]='\0';
         memset(dp, 0, sizeof(dp)); 
        for( int i = 0; i < l; i++)
            for(int  j = 0; j < to; j++)
                if(str1[i] == s2[j])
                    dp[i + 1][j + 1] = dp[i][j] + 1;
                else
                    dp[i + 1][j + 1] = max(dp[i + 1][j], dp[i][j + 1]);
        cout<<l-dp[l][to]<<endl;

    }

    return 0;
}
相關文章
相關標籤/搜索