1. 程式人生 > >相似串(百度2017秋招真題)

相似串(百度2017秋招真題)

相似串(百度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(); } }