前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串长度最大乘积

字符串长度最大乘积

作者头像
喜欢ctrl的cxk
发布2019-11-08 10:36:43
3K0
发布2019-11-08 10:36:43
举报
文章被收录于专栏:Don的成长史Don的成长史

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42449444/article/details/95098742

题目描述:

已知一个字符串数组words,要求寻找其中两个没有重复字符的字符串,使得这两个字符串的长度乘积最大,输出这个最大的乘积。如:

words=["abcd","wxyh","defgh"], 其中不包含重复字符的两个字符串是"abcd"和"wxyh",则输出16

words=["a","aa","aaa","aaaa"], 找不到满足要求的两个字符串,则输出0

输入描述:

代码语言:javascript
复制
Input:

["a","ab","abc","cd","bcd","abcd"]

输出描述:

代码语言:javascript
复制
Output:

4

输入样例1:

代码语言:javascript
复制
["a","ab","abc","cd","bcd","abcd"]

输出样例1:

代码语言:javascript
复制
4

说明:

代码语言:javascript
复制
Input中,不包含相同字符的有两对

"ab"和"cd"

"a"和"bcd"

所以字符串长度乘积的最大值是4

解题思路:

快手校招题。无脑暴力破解。先根据引号来分割单词(暂且称引号中的字符串为单词吧)并将它们放入vector中。自定义函数fun用于判断俩个字符串中有无重复字符,若有重复字符则返回0,否则返回这俩个字符串的长度乘积,这部分我是用set来实现的。好起来啦,ans初始化为0,然后开始双层for循环无脑比较,不停地更新最大值ans,最后输出ans即可。

AC代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

int fun(string s1,string s2)    //判断俩个字符串中有无重复字符,若有重复字符则返回0,否则返回这俩个字符串的长度乘积
{
    set<char> s;
    for(auto it : s1)
    {
        if(s.count(it) == 0)
        {
            s.insert(it);
        }
        else
        {
            return 0;
        }
    }
    for(auto it : s2)
    {
        if(s.count(it) == 0)
        {
            s.insert(it);
        }
        else
        {
            return 0;
        }
    }
    int ans = s1.length()*s2.length();
    return ans;
}

int main()
{
    string str;
    getline(cin,str);
    vector<string> v;
    //分割字符串得到单词
    for(int i = 0; i < str.length(); i++)
    {
        if(str[i] == '"')
        {
            string word = "";
            i++;
            while(str[i] != '"')
            {
                word += str[i];
                i++;
            }
            //cout << word << endl;
            v.push_back(word);
        }
    }
    //暴力破解
    int ans = 0;   //输出结果,最大值
    for(int i = 0; i < v.size(); i++)
    {
        for(int j = i+1; j < v.size(); j++)
        {
            ans = max(ans,fun(v[i],v[j]));
        }
    }
    cout << ans << endl;
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 输入描述:
  • 输出描述:
  • 输入样例1:
  • 输出样例1:
  • 说明:
  • 解题思路:
  • AC代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档