题解 | #查找兄弟单词#

查找兄弟单词

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

  1. 兄弟串得一个技巧。(check函数)
  2. 进入之前就把条件设置好,如长度必然相等,然后彼此之间不等。
  3. 注意最后size()==0得情况。(无法输出第k得,所以要注意异常值处理)
#include<bits/stdc++.h>

using namespace std;

bool check(string s, string t){

    int arr[26] = {0};//一个小技巧来判断是否是兄弟串。

    for(int i=0; i< s.size(); i++){
        arr[s[i]-'a']++;
        arr[t[i]-'a']--;
    }

    for(int i =0; i<26;i++){
        if(arr[i]!=0) return false;
    }

    return true;

}


int main(){

    int N,k;

    while(cin>>N){
        vector<string> v;

        for(int i=0; i< N;i++){
            string s; cin>>s;
            v.push_back(s);
        }

        string str; cin>>str;
        cin>>k;

        int sum =0;
        vector<string> res;//最终得兄弟串
        for(int i =0; i< N; i++){
            if( (v[i].size()==str.size()) && v[i]!=str){//长度必然一样,但是不能完全一样
                if(check(v[i],str)){
                    res.push_back(v[i]);
                }
            }
        }


        sort(res.begin(), res.end());

        cout<<res.size()<<endl;

        if(res.size()!=0){
            cout<<res[k-1]<<endl;
        }


    }


    return 0;
}
剑指Offer 文章被收录于专栏

剑指offer的解析结合

全部评论

相关推荐

accaacc:2到4k,不是2k到4k,所以年薪是30块
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务