10、字符串分值和

10、字符串分值和,第1张

 【问题描述】
对于一个字符串 S,我们定义 S 的分值 f(S ) 为 S 中出现的不同的字符个
数。


例如 f(”aba”) = 2,f(”abc”) = 3, f(”aaa”) = 1。



现在给定一个字符串 S [0…n − 1](长度为 n),请你计算对于所有 S 的非空
子串 S [i… j](0 ≤ i ≤ j < n),f(S [i… j]) 的和是多少。



【输入格式】
输入一行包含一个由小写字母组成的字符串 S。



【输出格式】
输出一个整数表示答案。



【样例输入】
ababc
【样例输出】
28
【样例说明】
子串 f值
a 1
ab 2
aba 2
abab 2
ababc 3
b 1
ba 2
bab 2
babc 3
a 1
ab 2
abc 3
b 1
bc 2
c 1


一、暴力枚举

#include 
using namespace std;


int main(){
	string c;
	cin>>c;
	int len=c.length();
	int sum=len;
	int str[26];
	int s[26];
	for(int i=0;i<26;i++){
		s[i]=0;
	}
	str[0]=97;
	for(int i=1;i<26;i++){
		str[i]=str[i-1]+1;
	}
	for(int n=2;n<=len;n++){
		for(int i=0;i<=len-n;i++){
		string ch=c.substr(i,n);
		for(int j=0;j0){
				sum+=1;
				s[p]=0;
			}
		}
	}
	}
	cout<


二、使用set去掉重复元素

#include 
using namespace std;

int cal(string s){
	set st;
	for(int i=0;i>str;
	int len = str.length(); 
	for(int i=1;i<=len;i++){
		for(int j=0;j<=len-i;j++){
			string s=str.substr(j,i);
			sum+=cal(s);
		}
	}
	cout<

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/564426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-06
下一篇 2022-04-06

发表评论

登录后才能评论

评论列表(0条)