LeetCode242 有效的字母异位词(Java字符数组排序&自定义排序记录)
2024-09-24 22:30:38
题目:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
链接:https://leetcode-cn.com/problems/valid-anagram
思路:
将字符串中的字母按某种顺序排序,然后比较即可。
字符串比较:
String的equals方法是经过重写后的,利用该方法直接比较两个String字符串时,是字符串的值进行比较的。
如果是将String字符串通过Sting的toCharArray()方法转换成char数组后,再利用char数组的equals进行比较时,实际上参与比较的是两个char数组的地址。如果是想让char数组的内容进行比较的话,需要用Arrays.equals(str1,str2)进行比较。
代码:
import java.util.*;
import java.math.*; class Solution {
public boolean isAnagram(String s, String t) {
char[] ss = s.toCharArray();
char[] tt = t.toCharArray();
Arrays.sort(ss);
Arrays.sort(tt);
return Arrays.equals(ss, tt);
}
} public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
Solution solution = new Solution();
String s = scanner.nextLine();
String t = scanner.nextLine();
System.out.println(solution.isAnagram(s, t));
}
}
要实现自定义排序,有两种方法
1.实现comparator接口,并重写compare方法
代码:
import java.util.*;
import java.math.*; class MySort implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
} public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Integer[] a = new Integer[n];
for(int i=0; i<n; i++){
a[i] = scanner.nextInt();
}
Arrays.sort(a,new MySort());
for(int i=0; i<a.length; i++){
System.out.println(a[i]);
} }
}
2.实现类的自定义排序,需要实现comparable接口并重写compareTo方法
代码:
import javax.swing.text.html.parser.TagElement;
import java.util.*;
import java.math.*; class Student implements Comparable{
private int id;
private int age;
private String name; public Student(String name, int id, int age){
this.age = age;
this.id = id;
this.name = name;
}
public int getId(){
return id;
}
public int getAge(){
return age;
}
public String getName(){
return name;
} @Override
public int compareTo(Object o) {//按id降序排列
Student s = (Student) o;
if(this.id >= s.getId()){
return -1;
}else{
return 1;
}
} @Override
public String toString() {
return "name: "+name+" age: "+age+" id: "+id;
}
} public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int id,age;
String name;
List<Student> list = new ArrayList<>();
for(int i=0; i<n; i++){
name = scanner.nextLine();
scanner.next();//吃掉回车
id = scanner.nextInt();
age = scanner.nextInt();
list.add(new Student(name,id,age));
}
Collections.sort(list);
for(int i=0; i<n; i++){
System.out.println(list.get(i).toString());
}
}
}
最新文章
- 搭建一套自己实用的.net架构(4)【CodeBuilder-RazorEngine】
- 带复杂表头合并单元格的HtmlTable转换成DataTable并导出Excel
- ubuntu下使用反编译apk,工具dex2jar和jd-gui
- ajaxFileUpload增加附加参数
- IK分词算法设计总结
- DirectX Sample-Blobs实现原理
- C++中顶层const和底层const
- 设计模式--模板方法 And State模式
- geom设置—折线图
- 大数据Python学习大纲
- 用PyCharm执行测试成功但无法生成HTMLTestRunner报告
- [转载] ZooKeeper的Java客户端API
- Java I/O---输入与输出
- springMVC源码分析--@ModelAttribute使用及运行原理
- Django之自带的认证系统 auth模块
- 75.iOS内存管理
- Ex 3_17 无穷路径..._十一次作业
- 题解——Codeforces Round #507 (based on Olympiad of Metropolises) T1 (模拟)
- Qt532.QString::split()
- 从零系列--开发npm包(一)
热门文章
- 洛谷 P3009 [USACO11JAN]利润Profits
- PAT A1103 Integer Factorization
- day2-2循环语句
- mapreduce程序执行过程
- 为什么需要NAT,目前家庭的计算机器如何上网?(原创)
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 显示代码:同一行代码片段: span, div
- 在PyCharm中自动添加文件头、时间日期等信息
- 爬虫实战_爬取豆瓣图书利用csv库存储
- 「BJOI2018」求和
- Centos7 安装编译nginx-1.9.6过程