当前位置: 首页> 汽车> 维修 > 公司建网站的步骤是什么_图纸设计平面图软件_厦门百度公司_互联网运营主要做什么

公司建网站的步骤是什么_图纸设计平面图软件_厦门百度公司_互联网运营主要做什么

时间:2025/7/12 20:08:37来源:https://blog.csdn.net/yyssas/article/details/142514675 浏览次数: 0次
公司建网站的步骤是什么_图纸设计平面图软件_厦门百度公司_互联网运营主要做什么

2306. 公司命名

已解答

困难

相关标签

相关企业

提示

给你一个字符串数组 ideas 表示在公司命名过程中使用的名字列表。公司命名流程如下:

  1. 从 ideas 中选择 2 个 不同 名字,称为 ideaA 和 ideaB 。
  2. 交换 ideaA 和 ideaB 的首字母。
  3. 如果得到的两个新名字  不在 ideas 中,那么 ideaA ideaB串联 ideaA 和 ideaB ,中间用一个空格分隔)是一个有效的公司名字。
  4. 否则,不是一个有效的名字。

返回 不同 且有效的公司名字的数目。

思路:

首先,先思考两个什么样的名字才能满足条件组合,必须是首字母不同,且后缀不相同,才可能能组合。

因此,可以按照首字母划分,每个首字母保存对应的后缀。

对于两个名字,分别是prea,backa   ,preb,backb,只有prea!=preb且backa!=backb才能组合,因此,只需要求出prea数组中,不包含backb的部分backa;和preb数组中,不包含backa的部分backb,相乘就是组合的个数。

而求prea中不是backb的部分,就是求backa和backb的差集,就是backa-(backa∩backb)。对另一边同理。而backa/backb可以直接得出来,因此只需要求两者的交集即可。求交集的时间最坏是O(nlogn),即各占n/2左右,每次找一个是否在另一个集合中是O(logn),因此最差是O(NlogN)。

class Solution {
public:set<string>hash[26];//前缀,和对应的所有后缀long long gets(set<string>&s1,set<string>&s2){  long long ans=0;for(auto &e:s1)if(s2.count(e))ans++;return ans;}long long distinctNames(vector<string>& ideas) {for(auto e:ideas){hash[e[0]-'a'].insert(e.substr(1,e.size()-1));}long long ans=0;for(int i=0;i<26;i++){for(int j=0;j<26;j++){if(i!=j){long long inter=gets(hash[i],hash[j]);ans+=(hash[i].size()-inter)*(hash[j].size()-inter);}}}return ans;// for(auto e:ideas)// newid.insert(e);// for(int i=1;i<ideas.size();i++)//  for(int j=0;j<i;j++)//  {//     string s1=ideas[i],s2=ideas[j];//     swap(s1[0],s2[0]);//    // cout<<s1<<" "<<s2<<";";//     if(newid.count(s1)==0&&newid.count(s2)==0)//     ans.insert(s1+" "+s2),ans.insert(s2+" "+s1);//  }//  //暴力做法,死于两层循环时间到了n^2;//  return ans.size();}
};

关键字:公司建网站的步骤是什么_图纸设计平面图软件_厦门百度公司_互联网运营主要做什么

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: