题解 | #小红的字符串构造#

小红的字符串构造

http://www.nowcoder.com/questionTerminal/3e4b4dabc2e444e384c3ae62ac7dd84e


public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.next();

        // 使用 LinkedHashSet 以保持插入顺序
        Set<Character> uniqueChars = new LinkedHashSet<>();

        // 将字符串s的每个字符添加到Set中以去除重复字符
        for (char c : s.toCharArray()) {
            uniqueChars.add(c);
        }
        //就一个字符肯定没法弄
        if(uniqueChars.size()==1) System.out.println(-1);
        else{
            // 将Set转换为List来创建映射
        List<Character> uniqueCharsList = new ArrayList<>(uniqueChars);

        // 创建映射
        Map<Character, Character> mapping = new HashMap<>();
        int size = uniqueCharsList.size();
        for (int i = 0; i < size; i++) {
            // 将当前字符映射到下一个字符,最后一个字符映射到自己
            char currentChar = uniqueCharsList.get(i);
            char nextChar = uniqueCharsList.get((i + 1) % size); // 使用取模来循环到第一个字符
            mapping.put(currentChar, nextChar);
        }

        // 构建新的字符串t
        StringBuilder tBuilder = new StringBuilder();
        for (char c : s.toCharArray()) {
            tBuilder.append(mapping.get(c));
        }
        String t = tBuilder.toString();

        // 输出新字符串
        System.out.println(t);
        }
        

        in.close();
    }
}

比较贪心的一种解法,就是a映射到b,b映射到c,c映射到a。给它先定下来。

  1. 首先是遍历字符串,找到去重字符集。 2.然后创建映射,a到b,这种。将当前字符映射到下一个字符,最后一个字符映射到自己。 3.创建t字符串,遍历每个s中的字符,一一替换就行了。

自测的时候运行不了,保存提交的时候就成功了。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务