2016-9-20 百度 机器学习工程师 编程题一

一道来自百度机器学习工程师编程题,给定仅含小写字母的字符串,计算所有子串数量。例如,输入字符串'aaabbaa',输出为5,因有'a', 'aa', 'aaa', 'b', 'bb'五个子串。现有代码通过率仅为17.5%,寻求优化建议。" 80662241,5017485,Centos 7 安装ElasticSearch-head及解决跨域,"['elasticsearch6.x', 'elasticsearch-head', '跨域', 'centos 7']

题意:

给定一个字符串,只包含小写字母,求子串个数。

例子:

输入:aaabbaa

输出:5

(因为输入串中 包含 a,aa,aaa,b,bb  5个子串)


以下代码 在赛马网上 只过了17.5%,求路过大神 指点

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
        string a;    
	int b[26]={0};
         cin>>a;
	 // if(a=="")cout<<"99"<<endl;
	 //统计各个字符
	 int k,i;
	 for(i=0;i<a.length();i++)
	 {
		 k=a[i]-'a'; 
		 b[k]++;
	 } 

	 vector <char>s;
	 char t;
	 int cc=0;
	  for(i=0;i<26;i++)
	  {
		  if(b[i]!=0){
			  t=i+'a';
			  s.push_back(t);cc++;}
	  }
    //cc是abc个数,进行判别


	  int c=0,j; 
	  for(j=0;j<cc;j++)
	  {
		   
		  string sub="";
	  for(i=0;i<a.length();i++)
	  {
		  
		  sub=sub+s[j];	 
		  if(a.find(sub)!=string::npos)c++;
	  }
	  }

	  cout<<c<<endl;

    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值