Programmersニュースクラスタ
14747 ワード
問題の答えよりも、どうやって簡単にできるか悩んでいます.
文字列を2文字に分割して2文字列の並びと交差の問題を求める. 文字列では文字のみ有効で、大文字と小文字を区別せず、第1文では 習ったことがある.また勉強しました. 両方の比較対象が公集であれば忘れてはならない 筆者は2文字列の交点と並列を求める際に使用した だから交点だけを求めた
transform
関数を使用して文字列をすべて小文字に変換します.transform(str1.begin(), str1.end(), str1.begin(), ::tolower)
:文字列str 1をすべて小文字に変換する関数.for
文中に文字だけ入れてvector
65536
합집합 = 두 집합을 모두 더한 수 - 교집합
の原理.check
関数で重複部分の個数を数えた.💻完全なコード
#include <string>
#include <vector>
#include <string.h>
#include <algorithm>
using namespace std;
bool check[2001];
int solution(string str1, string str2)
{
int answer = 0;
vector<string> v[2];
transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
transform(str2.begin(), str2.end(), str2.begin(), ::tolower);
for (int i = 0; i < str1.size() - 1; i++)
{
if (str1[i] >= 'a' && 'z' >= str1[i] && 'a' <= str1[i + 1] && str1[i + 1] <= 'z')
v[0].push_back(str1.substr(i, 2));
}
for (int i = 0; i < str2.size() - 1; i++)
{
if (str2[i] >= 'a' && 'z' >= str2[i] && 'a' <= str2[i + 1] && str2[i + 1] <= 'z')
v[1].push_back(str2.substr(i, 2));
}
if (v[0].empty() && v[1].empty())
return 65536;
int uni = 0, intersection = 0;
for (int i = 0; i < v[0].size(); i++)
{
for (int j = 0; j < v[1].size(); j++)
{
if (check[j])
continue;
if (v[0][i] == v[1][j])
{
check[j] = 1;
intersection++;
break;
}
}
}
uni = v[0].size() + v[1].size() - intersection;
if (uni == 0)
return 65536;
double tmp = (double)intersection / (double)uni;
answer = tmp * 65536;
return answer;
}
Reference
この問題について(Programmersニュースクラスタ), 我々は、より多くの情報をここで見つけました https://velog.io/@luck2901/Programmers뉴스-클러스터링テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol