相似串(百度2017秋招真題)
阿新 • • 發佈:2019-01-13
相似串(百度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();
}
}