列表

详情


NC52372. 本质不同字符串

描述

给你一个字符串,求该串子串种类数,举例子,aaba有8种子串,分别是:a b aa ab ba aab aba aaba

输入描述

输入一个字符串s(1 <= |s| <= 1000)

输出描述

输出一个数表示答案

示例1

输入:

aaba

输出:

8

示例2

输入:

aaaa

输出:

4

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 730ms, 内存消耗: 207052K, 提交时间: 2019-08-16 15:27:37

#include<bits/stdc++.h>
using namespace std;
string t;
unordered_map<string,int>mp;
int main()
{
	char s[1010];
	scanf("%s",s);
	int len = strlen(s),ans=0;
	for(int i=0;i<len;i++){
		t="";
		for(int j=i;j<len;j++){
			t+=s[j];
			if(mp.count(t)==NULL){
				mp[t]=1;ans++;
			}
		}
	}
	cout<<ans<<endl;
}

C++14(g++5.4) 解法, 执行用时: 661ms, 内存消耗: 210916K, 提交时间: 2019-08-19 23:16:50

#include<bits/stdc++.h>
using namespace std;
int main()
{
	set<string>ss;
	string str;
	char s[2000];
	cin>>s;
	for(int i=0;i<strlen(s);i++)
	{
		str.clear();
		for(int j=i;j<strlen(s);j++)
		{
			str+=s[j];
			ss.insert(str);
		}
		
	}
	cout<<ss.size()<<endl;
}

pypy3 解法, 执行用时: 637ms, 内存消耗: 261948K, 提交时间: 2022-08-12 16:22:20

d = dict()
s = input()
for i in range(1,len(s) + 1):
    for j in range(0,len(s) - i + 1):
        ss = s[j:j + i]
        d[ss] = 1
print(len(d))

Python3 解法, 执行用时: 793ms, 内存消耗: 217784K, 提交时间: 2023-06-06 00:34:50

s = input()
a = set()
for b in range(1,len(s)+1):
    for i in range(len(s)-b+1):
        a.add(s[i:i+b])
print(len(a))

上一题