当前位置:首页 » 《随便一记》 » 正文

牛客刷题

18 人参与  2023年05月02日 18:09  分类 : 《随便一记》  评论

点击全文阅读


目录

1、乒乓球框

 Ⅰ、思路

 Ⅱ、代码

 2、查找兄弟单词

输入描述:

 Ⅰ、思路

 Ⅱ、代码


1、乒乓球框

乒乓球筐__牛客网 (nowcoder.com)

nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类,并且每种球的数量不少于B盒中的数量,该怎么办呢?

 

输入描述:

输入有多组数据。每组数据包含两个字符串A、B,代表A盒与B盒中的乒乓球,每个乒乓球用一个大写字母表示,即相同类型的乒乓球为相同的大写字母。字符串长度不大于10000。

输出描述:

每一组输入对应一行输出:如果B盒中所有球的类型在A中都有,并且每种球的数量都不大于A,则输出“Yes”;否则输出“No”。

示例1

输入

ABCDFYE CDE<br/>ABCDGEAS CDECDE

输出

Yes<br/>No

 Ⅰ、思路

使用HashMap进行一个个判断B盒中的球在A盒中是否有,然后剔除A盒的球,直到遍历完B盒中的球,B盒中所有的球在A中都有,则输出 Yes 否则输出 No。

对HashMap不了解的同学可以看看这篇文章!

HashSet和HashMap_hashset foreach_冷兮雪的博客-CSDN博客

或者使用StringBuffer,也是和HashMap一样的写法

 Ⅱ、代码

 HashMap

import java.util.HashMap;import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner sc=new Scanner(System.in);        while (sc.hasNext()){//多组输入            String s=sc.nextLine();            String[] ss=s.split(" ");            HashMap<Character,Integer> map1=new HashMap<>();//将A盒乒乓球放入HashMap中记录            for (int i=0;i<ss[0].length();i++){                map1.put(ss[0].charAt(i),map1.getOrDefault(ss[0].charAt(i),0)+1);            }            boolean b=true;//标识符,判断A盒的球是否满足条件,因为是多组输入,不能直接return            for (int i=0;i<ss[1].length();i++){//遍历B盒乒乓球,查看A盒的球是否满足条件                if (map1.containsKey(ss[1].charAt(i))){//查看是否有B盒中的球                    if (map1.get(ss[1].charAt(i))==0) {//查看A盒中的球是否不为0                        b=false;                        System.out.println("No");                        break;                    }                    else//A盒中有,则一个个剔除                        map1.put(ss[1].charAt(i),map1.get(ss[1].charAt(i))-1);                }else{                    b=false;                    System.out.println("No");                    break;                }            }            if (b)                System.out.println("Yes");        }    }}

 StringBuffer

import java.util.Scanner;public class Main{public static void main(String[] args){Scanner in = new Scanner(System.in);while (in.hasNext()){boolean contain = true;StringBuffer s = new StringBuffer(in.next());char[] find = in.next().toCharArray();for (char c : find){int index = s.indexOf(String.valueOf(c));if (index != -1)s.deleteCharAt(index);else{System.out.println("No");contain = false;break;}}if (contain)System.out.println("Yes");}}}

 2、查找兄弟单词

查找兄弟单词_牛客题霸_牛客网 (nowcoder.com)

描述

定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。

兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。

现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?

注意:字典中可能有重复单词。

数据范围: 1≤n≤1000 ,输入的字符串长度满足  1≤len(str)≤10  ,  1≤k<n 

输入描述:

输入只有一行。 先输入字典中单词的个数n,再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k

输出描述:

第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。

示例1

输入:

3 abc bca cab abc 1

输出:

2bca

示例2

输入:

6 cab ad abcd cba abc bca abc 1

输出:

3bca

说明:

abc的兄弟单词有cab cba bca,所以输出3经字典序排列后,变为bca cab cba,所以第1个字典序兄弟单词为bca   

 Ⅰ、思路

 三步走

对n个单词升序排序第n个单词和 x 相等 和 长度不一致的跳过对第n个单词 和 x 的每个字符升序排序,并比较是否相等,如果相等则为兄弟单词。

 Ⅱ、代码

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Collections;public class Main {    public static void main(String[] args) throws IOException {        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));        String s = null;        s = bf.readLine();        // 将输入的字符串分割成字符串数组        String[] words = s.split(" ");        // 待查找单词        String str = words[words.length - 2];        // 兄弟单词表里的第k个兄弟单词        int k = Integer.parseInt(words[words.length - 1]);        // 存放兄弟单词表        ArrayList<String> broWords = new ArrayList<>();        // 遍历输入的单词        for (int i = 1; i < words.length - 2; i++) {            // 不相等且长度相同            if ((!words[i].equals(str)) && words[i].length() == str.length()) {                char[] chStr = str.toCharArray();                char[] word = words[i].toCharArray();                int temp = 0;                for (int j = 0; j < chStr.length; j++) {                    for (int j2 = 0; j2 < word.length; j2++) {                        if (word[j] == chStr[j2]) {                            chStr[j2] = '0';                            temp++;                            break;                        }                    }                }                // 相等且长度相同,则存放进broWords                 if (temp == chStr.length) {                    broWords.add(words[i]);                }            }        }        System.out.println(broWords.size());        if (k > 0 && k <= broWords.size()) {            Collections.sort(broWords);//按字典排序            System.out.println(broWords.get(k - 1));        }    }}
import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner sc=new Scanner(System.in);        int n=sc.nextInt();        ArrayList<String> arr=new ArrayList<>();        String[] s1=new String[n];        for (int i=0;i<n;i++){            s1[i]=sc.next();        }        String ss=sc.next();//单词x        char[] ar1=ss.toCharArray();//转换成char数组,方便比较是否为兄弟单词        Arrays.sort(ar1);        int k=sc.nextInt();//第k个兄弟单词        for (String s : s1) {//遍历s1数组 与ss单词不能相同且长度应该一样            if (!s.equals(ss) && s.length() == ss.length()) {                char[] ar2 = s.toCharArray();                Arrays.sort(ar2);                if (Arrays.toString(ar2).equals(Arrays.toString(ar1))) {//判断单词组成是否相同                    arr.add(s);                }            }        }        Collections.sort(arr);//按字典顺序排序        System.out.println(arr.size());        if (arr.size()>k){            System.out.println(arr.get(k-1));        }    }}


点击全文阅读


本文链接:http://zhangshiyu.com/post/60277.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1