题解 | #查找兄弟单词#

查找兄弟单词

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

思路

优先排除掉同目标字符串相同和长度不一致的字符串。剩下长度相同的,统计一下字符串各个字符出现的评率,在通过遍历 target 去删除频率,如果最终的字符映射为空,说明相同。则说明可由目标字符串变换而来。

代码

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

using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<string> strs(n);
    for( int i = 0; i < n; i++ )
        cin >> strs[i];
    string target;
    cin >> target;
    int index;
    cin >> index;
    int count = 0;
    vector<string> res;
    for( int i = 0; i < n; i++ )
    {
        if( strs[i].size() != target.size() || strs[i].compare(target) == 0)
            continue;
        unordered_map<char, int> mapping;
        int len = strs[i].size();
        for( int j = 0; j < len; j++ )
        {
            char ch = strs[i][j];
            if( mapping.find(ch) != mapping.end() )
                mapping[ch]++;
            else
                mapping[ch] = 1;
        }
        
        for( int j = 0; j < len; j++)
        {
            if( mapping.find(target[j]) != mapping.end() )
                mapping[target[j]]--;
            if(mapping[target[j]] == 0)
                mapping.erase(target[j]);
        }
        if( mapping.empty() )
        {
            count++;
            res.push_back(strs[i]);
        }
    }
    cout << count << endl;
    if( !res.empty() && index <= res.size() )
    {
        sort(res.begin(), res.end());
        cout << res[index-1] << endl;
    }
    return 0;
}
全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
矫健的闭门羹烹饪师又熬夜了:本人双非本,在鹅厂测开实习,你这个简历上写的这两个项目的技术栈都差不多,能够让面试官去延伸去问的八股除了redis就再没啥了,建议项目这边可以再改改,然后专业技能那块的话,感觉linux和测试工具可以分开写,毕竟不是干一件事的,反正没实习的基础上面试就深挖项目和八股,好好卷吧
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务