1. 程式人生 > 其它 >字串s.substr()用法

字串s.substr()用法

技術標籤:字串字串演算法

P2957 [USACO09OCT]Barn Echoes G

題目描述

奶牛們非常享受在牛欄中哞叫,因為她們可以聽到她們哞聲的迴音。雖然有時候並不能完全聽到完整的迴音。Bessie曾經是一個出色的祕書,所以她精確地紀錄了所有的哞叫聲及其回聲。她很好奇到底兩個聲音的重複部份有多長。

輸入兩個字串(長度為1到80個字母),表示兩個哞叫聲。你要確定最長的重複部份的長度。兩個字串的重複部份指的是同時是一個字串的字首和另一個字串的字尾的字串。

我們通過一個例子來理解題目。考慮下面的兩個哞聲:

moyooyoxyzooo

yzoooqyasdfljkamo

第一個串的最後的部份"yzooo"跟第二個串的第一部份重複。第二個串的最後的部份"mo"跟第一個串的第一部份重複。所以"yzooo"跟"mo"都是這2個串的重複部份。其中,"yzooo"比較長,所以最長的重複部份的長度就是5。

輸入輸出樣例

輸入

abcxxxxabcxabcd
abcdxabcxxxxabcx

輸出

11

思路

以為是字首和的題,結果是一個字串的題,用到了string型的自帶函式,s.substr(int a,int b)提取從a到b的字串,s.size()是求字串的長度

題解

#include<bits/stdc++.h>
using namespace std;
int len1,len2;
string s1,s2;
int main(){
	cin >> s1;
	cin >> s2;
	for(int i=1;i<=min(s1.size
(),s2.size());i++){ if(s1.substr(0,i)==s2.substr(s2.size()-i,s2.size())){ len1 = i; } if(s2.substr(0,i)==s1.substr(s1.size()-i,s1.size())){ len2 = i; } } if(len1>len2) cout << len1; else cout << len2; }