版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tinyDolphin/article/details/79426823
相似串(百度2017秋招真题)
题目描述
S和T是两个字符串(它们只由小写字母构成),定义S与T相似当且仅当:
- S 和 T 长度相同。
- 对于任意两个位置 i 和 j ,如果 Si 和 Sj 相同,那么 Ti 和 Tj 相同;如果 Si 和 Sj 不同,那么 Ti 和 Tj 不同。(Si的含义为字符串 S 在第 i 个位置的字符,Ti 的含义为字符串 T 在第 i 个位置的字符)
与字符串”abca”相似的串有”abca”,”cdac”,”zetz”等,现在给出一个字符串S,输出与之相似的字典序最小的串。
输入
输入只有一行,一个字符串,长度不超过100000,只由小写字母组成。
输出
输出一行,与之相似的字典序最小的串(只由小写字母组成的串)。
样例输入
helloworld
样例输出
abccdedfcg
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;
/**
* 思路:暴力
*/
public class Main {
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
String str;
char[] chs = new char[100050];
char ch;
while (in.hasNext()) {
ch = 'a';
str = in.next();
for (int i = 0; i < str.length(); i++) {
if (chs[i] == '\u0000') {
chs[i] = ch;
for (int j = i + 1; j < str.length(); j++) {
if (str.charAt(i) == str.charAt(j)) {
chs[j] = ch;
}
}
ch++;
}
}
out.println(new String(chs, 0, str.length()));
}
out.flush();
}
}