题目大意:给你一个字符串helloworld,然后让你给出一个相似的串,相似串整体上字母顺序从左到右出现,且与原字符串对应的位置的字符都要一致。则helloworld对应的相似串为abccdedfcg。
解题思路:先建立一个hashMap,让原字符串找到对应的字符。例如:h-a,e-b,l-c以此类推。然后再遍历原字符串,输出相应的相似串即可。
package 百度; import java.util.HashMap; import java.util.Scanner; /** * @题目描述:S和T是两个字符串(它们只由小写字母构成),定义S与T相似当且仅当: 1、S和T长度相同。 * 2、对于任意两个位置i和j,如果Si和Sj相同,那么Ti和Tj相同;如果Si和Sj不同,那么Ti和Tj不同。 * (Si的含义为字符串S在第i个位置的字符,Ti的含义为字符串T在第i个位置的字符) * 与字符串”abca”相似的串有”abca”,”cdac”,”zetz”等,现在给出一个字符串S,输出与之相似的字典序最小的串。 * * @样例输入:helloworld * @样例输出:abccdedfcg * * @author 崔洪振367 * @version 创建时间:2017年4月22日 下午10:33:30 */ public class Q2017秋招_相似串 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); HashMap<Character, Character> hashMap = new HashMap<>(); while (scanner.hasNext()) { String string = scanner.next();// 原字符串 int len = string.length(); int k = 0; for (int i = 0; i < len; i++) {//先找出原字符和字典序中字符的对应关系 char c = string.charAt(i); if (hashMap.size() == 0) { char cc = (char) ((int) 'a' + k);//原字符所对应的字典序中的字符 k++; hashMap.put(c, cc);//将对应关系添加到hashMap中 } else { if (!hashMap.containsKey(c)) { char cc = (char) ((int) 'a' + k); k++; hashMap.put(c, cc); } } } char[] cs = string.toCharArray();//原字符数组 StringBuffer sb = new StringBuffer(); for (char c : cs) { char ccc = hashMap.get(c); sb.append(ccc); } System.out.println(sb.toString()); } scanner.close(); } }