字符串相似率
和力扣72题-编辑距离类似
(只能通过自测,没有ac)
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String pucAExpression = scanner.nextLine();
String pucBExpression = scanner.nextLine();
System.out.println(calculateStringDistance(pucAExpression,pucBExpression));
}
public static String calculateStringDistance(String pucAExpression, String pucBExpression) {
if(pucAExpression.equals(pucBExpression)) return null;
if(pucAExpression.length()==0) return "1/"+String.valueOf(pucBExpression.length())+1;
if(pucBExpression.length()==0) return "1/"+String.valueOf(pucAExpression.length())+1;
int[][] dp = new int[pucAExpression.length()+1][pucBExpression.length()+1];
for(int i=0;i<=pucAExpression.length();i++){
for(int j=0;j<=pucBExpression.length();j++){
if(i==0) {dp[i][j]=j;continue;}
if(j==0) {dp[i][j]=i;continue;}
//当符号相同时,不需要操作,则前i个元素和前j个元素匹配的最少操作数等于前i-1个元素和前j-1个元素匹配的最少操作数
if(pucAExpression.charAt(i-1)==pucBExpression.charAt(j-1)) dp[i][j]=dp[i-1][j-1];
//当符号不相同时,则可以进行:
//1. 替换,前i-1个元素和前j-1个元素匹配的最少操作数+1
//2. 插入,前i个元素和前j-1个元素匹配的最少操作数+1
//3. 删除,前i-1个元素和前j个元素匹配的最少操作数+1
//所以则前i个元素和前j个元素匹配的最少操作数三种情况的最小值
else dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
}
}
return "1/"+(dp[pucAExpression.length()][pucBExpression.length()]+1);
}
成绩排序
输入一个正整数【n】
接着输入n行,每行输入【学号 成绩】
要求按成绩从小到大排序,如果成绩相等,按学号从小到大排序输出
(已ac)
public static void maiJn(String[] args) {
//控制台输入
Scanner in = new Scanner(System.in);
int n = in.nextInt();
List<int[]> list = new ArrayList<>();
for(int i=0;i<n;i++) {
while (in.hasNextInt()) {
int[] dt = new int[2];
dt[0]=in.nextInt();
dt[1]=in.nextInt();
list.add(dt);
break;
}
}
//排序
list.sort((o1, o2) -> {
if(o1[1]==o2[1]) return o2[0]<o1[0]? 1:-1;
else return o2[1] < o1[1] ? 1 : -1;
});
//输出
for(int[] dt : list)
System.out.println(dt[0]+" "+dt[1]);
}