,

HJ27 查找兄弟单词

描述 定义一个字符串 ss 的“兄弟单词”为:将 ss 重新排序后得到…

描述

定义一个字符串 ss 的“兄弟单词”为:将 ss 重新排序后得到的与原字符串不同的新字符串。
现在,对于给定的 nn 个字符串 s1,s2,,sns1​,s2​,…,sn​ 和另一个单独的字符串 xx,你需要解决两个问题:
∙统计这 nn 个字符串中,有多少个是 xx 的“兄弟单词”(注意,这 nn 个字符串可能有重复,重复字符串分别计数);
∙将这 nn 个字符串中 xx 的“兄弟单词”按字典序从小到大排序,输出排序后的第 kk 个兄弟单词(从 11 开始计数)。特别地,如果不存在,则不输出任何内容。

【名词解释】
从字符串的第一个字符开始逐个比较,直至发现第一个不同的位置,比较这个位置字符的字母表顺序,字母序较小的字符串字典序也较小;如果比较到其中一个字符串的结尾时依旧全部相同,则较短的字符串字典序更小。

输入描述:

在一行上依次输入:
∙一个整数 n(1n103)n(1≦n≦103) 代表字符串的个数;
nn 个长度为 1length(si)101≦length(si​)≦10,仅由小写字母构成的字符串 s1,s2,,sns1​,s2​,…,sn​ ;
∙一个长度为 1length(x)101≦length(x)≦10,仅由小写字母构成的字符串 xx ;
∙一个整数 k(1kn)k(1≦kn) 代表要查找的第 kk 小的兄弟单词的序号。

输出描述:

第一行输出一个整数,代表给定的 nn 个字符串中,xx 的“兄弟单词”的数量;
第二行输出一个字符串,代表将给定的 nn 个字符串中 xx 的“兄弟单词”按字典序排序后的第 kk 小兄弟单词。特别地,如果不存在,则不输出任何内容(完全省略第二行)。

示例1

输入:

3 abc bca cab abc 1

输出:

2
bca

说明:

在这个样例中,xx 的兄弟单词为 "acb""acb" 、"bac""bac" 、"bca""bca" 、"cab""cab" 、"cba""cba" 。其中,标橙色的两个字符串存在于所给定的 nn 个字符串中。第 11 小的兄弟单词为 "bca""bca"。

示例2

输入:

3 a aa aaa a 1

输出:

0

说明:

在这个样例中,按照定义,字符串 "a""a" 没有兄弟单词。

判断兄弟单词技巧:

不采用求子串的方式,直接通过字符串对比的方式

box[i].split(“”).sort().join(“”)===target && box[i]!==target


void async function () {
    // Write your code here
    while(line = await readline()){
        let tokens = line.split(' ');
        const num = tokens[0]*1;
        const box = tokens.slice(1,num+1);
        const target = tokens[num+1];
        const kIdx =  tokens[tokens.length-1];
        const rightBox = [];
        //console.log(kIdx)
        //console.log(target,'target')
        //console.log(box)
       for(let i=0;i< num; i++){
         if(box[i].split("").sort().join("")===target && box[i]!==target){
            rightBox.push(box[i]);
         }
       }
       console.log(rightBox.length);
       //console.log(rightBox)
       if(rightBox[kIdx]){
         console.log(rightBox[kIdx-1])
       }
    }
}()

Next Post

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About the Author

每个人都有自己得时区,在自己得时区里,一切都是准时的。

BlockSpare — News, Magazine and Blog Addons for (Gutenberg) Block Editor