题目大意:给你一个字符串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();
}
}