版权声明:本文为博主原创文章,遵循 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
Input:
["a","ab","abc","cd","bcd","abcd"]
Output:
4
["a","ab","abc","cd","bcd","abcd"]
4
Input中,不包含相同字符的有两对
"ab"和"cd"
"a"和"bcd"
所以字符串长度乘积的最大值是4
快手校招题。无脑暴力破解。先根据引号来分割单词(暂且称引号中的字符串为单词吧)并将它们放入vector中。自定义函数fun用于判断俩个字符串中有无重复字符,若有重复字符则返回0,否则返回这俩个字符串的长度乘积,这部分我是用set来实现的。好起来啦,ans初始化为0,然后开始双层for循环无脑比较,不停地更新最大值ans,最后输出ans即可。
#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;
}