题解 | #小红的字符串构造#
小红的字符串构造
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。给它先定下来。
- 首先是遍历字符串,找到去重字符集。 2.然后创建映射,a到b,这种。将当前字符映射到下一个字符,最后一个字符映射到自己。 3.创建t字符串,遍历每个s中的字符,一一替换就行了。
自测的时候运行不了,保存提交的时候就成功了。