1. 程式人生 > >字符串的簡單拼接

字符串的簡單拼接

return stream 們的 style 去掉 div 目的 ostream 臨時

校選賽中我出的一道題,放在了第二題的位置,題目的思路來源於在求解單詞接龍這道題時,處理單詞串拼接時的實現細節,方法有很多,這裏介紹一種我想到的。

對於abc和bce,將他們拼在一起形成abcbce,之後去掉中間重疊的部分,就變成了abce,編程完成這一細節實現。

我們首先建立兩個空子串,然後存一下兩個串的長度的最小值,然後設置兩個指針,一個枚舉第一個字符串中的每一個字符,從後往前枚舉,一個枚舉第二個字符串中的每一個字符,從前往後枚舉

    for(int i=0;i<len;i++)
    {
        c=a[len1-i-1]+c;
        d=d+b[i];
        
if(c==d) tmp=c; }

看上述代碼,每枚舉到一個字符,就將其與空字符串連接,一個一個字符地去加。

每次加都判斷一下當前兩個新字符串是否相等,如果相等就把相等的這個結果存下來。

找完之後,我們將第一個字符串的後半部分去掉,去掉多少呢?就去掉之前存下來的結果的長度。同理,我們把第二個字符串的前半部分去掉,同樣也去掉當前那個臨時存下的結果的長度。

len=tmp.size();
    for(int i=0;i<len1-len;i++)
        ans=ans+a[i];
    for(int i=0;i<len;i++)
        ans
=ans+tmp[i]; for(int i=len;i<len2;i++) ans=ans+b[i];

我們的結果就變成了第一個字符串的前半部分+重疊部分(臨時存下的結果)+第二個字符串的後半部分

完整的實現代碼如下:

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 string a,b;
 5 int MIN(int x,int y)
 6 {
 7     return x<y?x:y;
 8 }
 9 int main()
10 {
11
cin>>a>>b; 12 int len1=a.size(); 13 int len2=b.size(); 14 string c="",d=""; 15 int len=MIN(len1,len2); 16 string tmp=""; 17 string ans=""; 18 for(int i=0;i<len;i++) 19 { 20 c=a[len1-i-1]+c; 21 d=d+b[i]; 22 if(c==d) 23 tmp=c; 24 } 25 len=tmp.size(); 26 for(int i=0;i<len1-len;i++) 27 ans=ans+a[i]; 28 for(int i=0;i<len;i++) 29 ans=ans+tmp[i]; 30 for(int i=len;i<len2;i++) 31 ans=ans+b[i]; 32 cout<<ans; 33 return 0; 34 }

字符串的簡單拼接