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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
    }
}

猜你喜欢

转载自blog.csdn.net/tinyDolphin/article/details/79426823