题解 | #查找兄弟单词# 新手纯基础操作解题
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68?tpId=37&tqId=21250&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fdifficulty%3D3%26judgeStatus%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&difficulty=3&judgeStatus=3&tags=&title=
#include <bits/stdc++.h> #include <sstream> using namespace std; bool borther(string s1,string s2){ vector<char>v1; vector<char>v2; if(s1 == s2){ return false; //两个字符串如果直接相等,就不是兄弟单词 } else if(s1.size()!=s2.size()){ return false; //两个字符串长度不同也不是兄弟单词 } else{ // 当两个字符串有相同的长度且不相同时,进入判断 for(char c1 : s1){ v1.push_back(c1); //先把s1中的每个字符输入进v1中 } sort(v1.begin(),v1.end()); // 把v1中的字符元素排序 for(char c2 : s2){ v2.push_back(c2); //先把s2中的每个字符输入进v2中 } sort(v2.begin(),v2.end()); // 把v2中的字符元素排序 string s3=""; for(char c3 : v1){ //把v1中排好序的字符元素按顺序输出到字符串s3中 s3 = s3 + c3; } string s4=""; for(char c4 : v2){ s4 = s4 + c4; //把v2中排好序的字符元素按顺序输出到字符串s4中 } if(s3 == s4){ return true; //如果两个字符串相同,说明这两个字符串拥有的字母相同,长度也相同,且不直接相同,是兄弟单词 } else{ return false; } } } int main() { string str; getline(cin,str); pair<int,int>p; vector<string>vec; string s1; string str1; stringstream ss(str); while (getline(ss,str1,' ')) { vec.push_back(str1); //cout<<str1<<';'; } int vend = vec.size(); //cout<<vend<<endl; int p1 = stoi(vec[0]); int p2 = stoi(vec[vend-1]); p.first = p1; p.second = p2; //cout<<p.first<<';'<<p.second<<endl; vector<string>v1; for(int i = 1 ; i<vend-2;i++){ v1.push_back(vec[i]); //cout<<vec[i]<<";"; } s1 = vec[vend-2]; //cout<<s1<<endl; int cont=0; vector<string>v0; for(string s0 : v1){ if(borther(s0, s1)){ cont++; v0.push_back(s0); //cout<<s0<<';'; } } cout<<cont<<endl; sort(v0.begin(), v0.end()); for(int j =0 ; j < v0.size() ;j++){ if(j == p.second-1){ cout<<v0[j]; } } return 0; } // 64 位输出请用 printf("%lld")