题解 | #查找兄弟单词#

查找兄弟单词

https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;
//交换两个string类型元素
void swap(string& s, string& t)
{
    string c;
    c = s;
    s = t;
    t = c;
}

int main() 
{
    int n, k;
    cin >> n;
    vector<string> s(n);//存储接下来要输入的n个字典单词
    for (auto it = s.begin(); it < s.end(); ++it){
        cin >> *it;
    }
    string t;
    cin >> t >> k;
    int sum_browords = 0;
    vector<string> v;//存储兄弟单词
    for (auto it = s.begin(); it < s.end(); ++it) {
        auto jt = t.begin();
        if (t.size() == (*it).size() && t != *it){//兄弟单词要求之一:单词长度一致且不完全相同
            for (jt = t.begin(); jt < t.end(); ++jt){//遍历t的每一个字母
                if (count(t.begin(), t.end(), *jt) != count((*it).begin(), (*it).end(), *jt)){
                    break;//该字母在t中的数量如果不等于在*it中的数量,则*it不是兄弟单词
                }
            }
            if (jt == t.end()){//如果jt遍历到了最后一个字母,则说明*it是兄弟单词
                sum_browords++;
                v.push_back(*it);//将兄弟单词放进v中
            }
        }
    }
    cout << sum_browords << endl;
    if (v.size() >= k){//如果兄弟单词数量大于等于k再进行冒泡排序操作
        for (auto pt = v.begin(); pt < v.end() - 1; ++pt){
            for (auto qt = v.end() - 1; qt > pt; --qt){
                if (*(qt - 1) > *qt){
                    swap(*(qt - 1), *qt);
                }
            }
        }
        cout << v[k - 1] << endl;
    }
    return 0;
}

兄弟单词的要求:1.单词长度相等;2.单词不完全相同;3.单词中的每一个字母数量都相同。

逻辑上不复杂,使用了it、jt、pt、qt四个迭代器,it、jt的目的是遍历s中的每一个单词和单词中的每一个字母。

全部评论

相关推荐

用户64975461947315:这不很正常吗,2个月开实习证明,这个薪资也还算合理,深圳Java好多150不包吃不包住呢,而且也提前和你说了没有转正机会,现在贼多牛马公司骗你说毕业转正,你辛辛苦苦干了半年拿到毕业证,后面和你说没hc了😂
点赞 评论 收藏
分享
自由水:这HR已经很好了,多的是已读不回和不读了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务