蓝桥备战国奖题后总结(1)

今天成功报名蓝桥杯,期待审核通过,争取在忙碌的每天都要抽出一点时间刷题,小白一枚,无刷题经验,文章旨在记录刷题后的知识点以便复习,题目难度从简单开始,大标题为 oj 题目,个人只会暴力解题,不了解算法,遇到好的题解代码会代替我的暴力解题代码,在日后也会慢慢学习了解,不论快与慢,只要在坚持,就是在进步------高博

注:整个系列为 Java 语言进行题解,针对个人欠缺总结,若有不懂,可在评论区发表。

一、确定字符串中是否包含唯一字符

java 复制代码
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s=scanner.nextLine();
        HashMap<Character,Integer> map=new HashMap<>();
        for(int i=0;i<s.length();i++){
          if(map.containsKey(s.charAt(i))){
            map.put(s.charAt(i),map.get(s.charAt(i))+1);
          }else{
            map.put(s.charAt(i),1);
          }
        }
        Collection<Integer> val=map.values();
        if(val.contains(2))
        System.out.println("NO");
        else System.out.println("YES");
    }

HashMap中的两个方法:

1、HashMap中 values() 方法

HashMap 类中的values()方法返回一个包含HashMap 中所有value 的Collection视图。这个Collection是基于HashMap 的映射关系的,所以对HashMap 的修改会反映在这个Collection中,反之亦然。如果在迭代过程中修改了HashMap,那么迭代的结果是不确定的。下面是一个简单的例子:

java 复制代码
HashMap<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);

Collection<Integer> values = map.values();
System.out.println(values); // 输出 [1, 2, 3]

map.put("d", 4);
System.out.println(values); // 输出 [1, 2, 3, 4]

在这个例子中,我们创建了一个HashMap 并向其中添加了三个键值对。然后我们使用values()方法获取了所有的value ,并输出了它们。接着我们又向HashMap 中添加了一个键值对,并再次输出了values()方法返回的Collection,可以看到它也被更新了。

2HashMap 中 K**eySet()方法**

可以使用**keySet()方法获取HashMap**中所有的键(主键)。例如:

java 复制代码
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);

Set<String> keys = map.keySet();
for (String key : keys) {
    System.out.println(key);
}

输出结果为:

java 复制代码
apple
banana
orange

在上面的例子中,keySet() 方法返回一个包含HashMap 中所有键的Set 集合。我们可以使用for-each循环遍历这个集合,获取每个键并打印出来。

3、输入字符串

可以使用Scanner类来输入字符串,示例代码如下:

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入字符串:");
        String str = scanner.nextLine();
        System.out.println("您输入的字符串是:" + str);
    }
}

运行程序后,控制台会提示用户输入字符串,用户输入后按回车键即可。程序会将用户输入的字符串保存在变量**str**中,并输出到控制台上。

4、字符串转化为字符数组

可以使用String类的toCharArray()方法将字符串转换为字符数组。例如:

java 复制代码
String str = "Hello World";
char[] charArray = str.toCharArray();

这样就可以将字符串**"Hello World"** 转换为字符数组charArray

java 复制代码
import java.util.Scanner;

public class InputExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个字符:");
        char c = scanner.next().charAt(0);
        System.out.println("您输入的字符是:" + c);
    }
}

在这个例子中,我们使用 Scanner 类来读取用户输入的字符。首先,我们创建了一个 Scanner 对象,并将 System.in 作为参数传递给它,以便从控制台读取输入。然后,我们使用 next() 方法读取输入的字符串,并使用 **charAt(0)**方法获取第一个字符。最后,我们将输入的字符打印到控制台上。

5、输入字符

在Java中,可以使用Scanner类来输入字符。以下是一个简单的例子:

二、 确定字符串是否是另一个的排列

java 复制代码
public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String st1=scan.nextLine();
        String st2=scan.nextLine();
        char[] s1=st1.toCharArray();
        char[] s2=st2.toCharArray();
        Arrays.sort(s1);
        Arrays.sort(s2);
        for(int i=0;i<s1.length;i++){
          if(s1[i]!=s2[i]){
            System.out.println("NO");
            return;
          }
        }
        System.out.println("YES");

        scan.close();
    }

1、sort() 方法给数组排序

Java中可以使用Arrays类中的sort方法来给数组排序。sort方法可以对数组进行升序排序或者降序排序。

以下是一个对整型数组进行升序排序的例子:

java 复制代码
int[] arr = {5, 2, 9, 1, 5, 6};
Arrays.sort(arr); // 对数组进行升序排序
System.out.println(Arrays.toString(arr)); // 输出结果为 [1, 2, 5, 5, 6, 9]

以下是一个对字符串数组进行降序排序的例子:

java 复制代码
String[] arr = {"apple", "banana", "orange", "pear"};
Arrays.sort(arr, Collections.reverseOrder()); // 对数组进行降序排序
System.out.println(Arrays.toString(arr)); // 输出结果为 [pear, orange, banana, apple]

需要注意的是,如果要对自定义类型的数组进行排序,需要保证该类型实现了Comparable 接口或者传入一个Comparator对象作为参数。

2、equals 方法和 ==

equals是Java中的一个方法,用于比较两个对象是否相等。在Java中,有两种方式来比较对象的相等性:

  1. ==运算符:用于比较两个对象的引用是否相等,即它们是否指向同一个内存地址。

  2. equals方法:用于比较两个对象的内容是否相等,即它们的属性值是否相等。

例如,我们有一个Person 类,包含nameage两个属性:

java 复制代码
public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Person person = (Person) obj;
        return age == person.age && Objects.equals(name, person.name);
    }

在这个例子中,我们重写了equals方法,使用name和age属性来比较两个Person对象是否相等。我们可以使用以下代码来测试:

java 复制代码
Person person1 = new Person("Tom", 20);
Person person2 = new Person("Tom", 20);
Person person3 = new Person("Jerry", 30);

System.out.println(person1.equals(person2)); // true
System.out.println(person1.equals(person3)); // false

在这个例子中,person1person2nameage 属性都相等,因此 equals 方法返回true ;而 person1person3nameage 属性不相等,因此 equals 方法返回 false

相关推荐
ahadee1 天前
蓝桥杯每日真题 - 第19天
c语言·vscode·算法·蓝桥杯
恃宠而骄的佩奇1 天前
i春秋-签到题
web安全·网络安全·蓝桥杯
ahadee1 天前
蓝桥杯每日真题 - 第18天
c语言·vscode·算法·蓝桥杯
St_Ludwig1 天前
C语言 蓝桥杯某例题解决方案(查找完数)
c语言·c++·后端·算法·游戏·蓝桥杯
BigShark8882 天前
2025蓝桥杯(单片机)备赛--扩展外设之I2C的重要应用--PCF8591(八)
单片机·职场和发展·蓝桥杯
BigShark8882 天前
2025蓝桥杯(单片机)备赛--扩展外设之NE555的使用及定时器1的详细讲解(十)
单片机·职场和发展·蓝桥杯
BigShark8882 天前
2025蓝桥杯(单片机)备赛--扩展外设之DS1302的使用(九)
单片机·职场和发展·蓝桥杯
濊繵2 天前
备赛蓝桥杯--算法题目(1)
算法·职场和发展·蓝桥杯
学习前端的小z3 天前
【蓝桥杯C/C++】深入解析I/O高效性能优化:std::ios::sync_with_stdio(false)
c++·蓝桥杯
轮到我狗叫了3 天前
2024年第15届蓝桥杯C/C++组蓝桥杯JAVA实现
职场和发展·蓝桥杯