題目鏈接:不同子串
時間限制: 1 Sec 記憶體限制: 256 MB
題目描述:
一個字串的非空子串是指字串中長度至少為1 的連續的一段字符組成的串,
例如,字串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共7 個,
注意在計算時,只算本質不同的串的個數,
請問,字串0100110001010001 有多少個不同的非空子串?
題意:就是算出這個字串有多少個非空子串,
思路:這種填空題,我們運行出結果后,把代碼注釋掉只列印運行結果即可,

代碼:
string s;
cin>>s;
int len=s.length();
map<string,int> mp; // 存放截取出來的字串
int num=0; // 累加不同子串的數量
for(int i=0; i<len; i++)
{
for(int j=1; j<=len; j++)
{
string ss=s.substr(i,j); //從下標i開始截取長度為j的字串
if(mp[ss]==0)
{
num++;
mp[ss]++;
}
}
}
cout<<num<<endl;
運行結果:

關于代碼中的 substr 我在詳細說下,很好理解
str = s.substr(index,length);
就是從s串的index下標處(下標從0開始)截取長度為length的子串賦給str,
舉個栗子:
s = “abcdefg”;
str = s.substr(index,length);
str = s.substr(2,3); // 輸出:cde
str = s.substr(2); // 輸出:cdefg
由上面代碼的運行結果可知,這個字串的不同非空子串數量為100,所以我們直接輸出100即可,
另外小可愛們注意,題目沒有要求輸入,所以我們只輸出結果即可,

完整代碼:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<vector>
#include<iomanip>
using namespace std;
int main()
{
/*string s;
cin>>s;
int len=s.length();
map<string,int> mp; // 存放截取出來的字串
int num=0; // 累加不同子串的數量
for(int i=0; i<len; i++)
{
for(int j=1; j<=len; j++)
{
string ss=s.substr(i,j); //從下標i開始截取長度為j的字串
if(mp[ss]==0)
{
num++;
mp[ss]++;
}
}
}
cout<<num<<endl;
*/
cout<<100<<endl; // 直接輸出即可,代碼注釋掉
}
小可愛們看完別忘了點贊喲,謝謝支持!

加油!
共同努力!
Keafmd
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/136340.html
標籤:其他
