Raine_Yang 2021-02-16 20:56 采纳率: 50%
浏览 151

ACSL竞赛题Sameness Factor求解

原题如下:

PROBLEM: Given 2 strings, separated by a space, calculate the ACSL Sameness Factor (ASF). Process the strings using following steps: string. Therefore, the A would be deleted and the NTI shifted to the left. Repeat this step until nore more characters to delete. to the ASF. Calculate the ACSL Sameness Factor by doing the following:

● Align the strings from left to right.

● Delete the like characters in the like locations from left to right.

● Proceeding from left to right, if the like location characters are not the same and deleting a character at a location in one of the strings which shifts the remaining characters to the left causes like characters to be at that location, delete those characters and any other like characters at like locations. If there is a case as in NAPE and ANTI where it is possible to delete a character at the same location in both strings, then delete it in the second

● Calculate the difference in the alphabetic locations from the aligned string characters in

● If there are characters remaining in one of the strings, add the number of those characters the second string to the string character in the first string. B to D would add 2 to the ASF. D to B would add -2 to the ASF.

 

Example: ABCDEFT ABXCGBTZFP ABCDEFT → ABCDEFT → CDEF → CDEF → DEF → DEF → DE ABXCGBTZFP → ABXCGBTZFP →XCGBZFP → CGBZFP → GBZFP → GBFP → GBP The ASF is calculated as: G to D = -3 B to E = + 3 P = + 1 (-3 + 3 + 1 = 1)

 

INPUT: There will be 5 inputs. Each input will contain 2 strings separated by a space and each fewer than 200 characters.

 

OUTPUT: For each input, print the ASF as described above. SAMPLE INPUT SAMPLE OUTPUT: (http://www.datafiles.acsl.org/2020/contest2/int-sample-input.txt)

BLAMEABLENESSES BLAMELESSNESSES                    1. -35

MEZZAMINES RAZZMATAZZ                                              2. -5

ABBREVIATIONS ABBREVIATORS                                     3. -4、

ABCDEFGHIJKLMNO ABKCLDZZHQJWWLX                     4. -86

ABCDEFGHIJKL ABXEWFRRH                                           5. -52

以下是我写的程序,自己一点问题查不出来,但是运行结果就是和给的示例不一样,到底是程序有什么bug,还是我把题理解错了?

import java.util.*;

public class Practice2 {

	public static String[] deleteSame (String[] origin) {
		//like character in like location
		String list1 = origin[0];
		String list2 = origin[1];
		String[] result = new String[2];
		boolean remain = false;
		
		
		//find the shortest string, in case of out of boundary error
		int loop = 0;
		if (list1.length() > list2.length()) {
			loop = list2.length();
		} else {
			loop = list1.length();
		}
		
		
		//identify and delete the like characters
		for (int i = 0; i < loop; i++) {
			if (list2.contains(list1.substring(i, i + 1))) {
			 if (list2.substring(i, i + 1).equals(list1.substring(i, i + 1))) {
			    list2 = list2.substring(0, i) + list2.substring(i + 1);
			    list1 = list1.substring(0, i) + list1.substring(i + 1);
			    remain = true;
			    loop--;
			 }
			}
		}
		result[0] = list1;
		result[1] = list2;
		if (!remain) {
			return result;  //continue this process until all the characters are deleted
		} else {
			return deleteSame(result);
		}
	}
	
	
	public static String[] deleteDifferent (String[] origin) {
		//like character in different locations
		String list1 = origin[0];
		String list2 = origin[1];
		String[] result = new String[2];
		boolean remain = false;
		
		
		int loop = 0;
		if (list1.length() > list2.length()) {
			loop = list2.length();
		} else {
			loop = list1.length();
		}
		
		
		for (int i = 0; i < loop; i++) {
		  if (list2.contains(list1.substring(i, i + 1))) {
		   if (list2.substring(i + 1, i + 2).equals(list1.substring(i, i + 1))) {  //delete the character before list2 and the like character
			   list2 = list2.substring(0, i) + list2.substring(i + 2);
			   list1 = list1.substring(0, i) + list1.substring(i + 1);
			   remain = true;
			   loop--;
		   } else if (list1.substring(i + 1, i + 2).equals(list2.substring(i, i + 1))) { //delete the character before list1 and like character
		       list1 = list1.substring(0, i) + list1.substring(i + 2);
		       list2 = list2.substring(0, i) + list2.substring(i + 1);
		       remain = true;
		       loop--;
		   }
		   } 
		}
		
		
		
		
		result[0] = list1;
		result[1] = list2;
		if (!remain) {
			return result;
		} else {
			return deleteDifferent(result);
		}
	}
	
	
	public static int getValue (String[] lists) {
		char[] words1 = lists[0].toCharArray();
		char[] words2 = lists[1].toCharArray();
		int result = 0;
		
		
		//find the longer array
		if (words2.length < words1.length) {
			for (int i = 0; i < words2.length; i++) {
				result += words1[i] - words2[i];  //calculate the sameness factor between each letter
			}
			for (int i = words2.length; i < words1.length; i++) {
				result++;   //add the remaining letters
 			}
		} else {
			for (int i = 0; i < words1.length; i++) {
				result += words1[i] - words2[i];
			}
			for (int i = words1.length; i < words2.length; i++) {
				result++;
			}
		}
		
		return result;
		
	}	
	
	
	
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
    Scanner input = new Scanner (System.in);
    String origin = input.nextLine();
    String[] temp = origin.split(" ");
    System.out.println(getValue(deleteDifferent(deleteSame(temp))));
    
	}

}
  • 写回答

1条回答 默认 最新

  • Raine_Yang 2021-02-19 21:17
    关注

    顶一下……

    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作