gpt4 book ai didi

java - 如何计算字符串中唯一字符的数量? - 更新

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:46 25 4
gpt4 key购买 nike

例如,字符串“abc”应该给出 3 个不同的字符,而字符串“abcccd”应该给出 4 个不同的字符。我不允许在此使用 Map、HashMap、TreeMap、Set、HashSet、StringBuffer 或 TreeSet。

到目前为止,我一直在尝试使用 for 循环,但是当我运行该程序时,我一直得到 0 个唯一字符。我是 Java 的新手,所以我真的不知道自己在做什么。

编辑:所以我更改了代码并得到了结果,但结果比我想要的少 1。我将输入“abc”,结果将显示为“2 个唯一字符”而不是三个。为了反击,我将 (uniqueChars + 1) 放在 println 语句中。这是一个很好的修正吗?如果用户什么都不输入,它仍然会说有 1 个唯一字符。

更新代码:

    userText = userText.toLowerCase(); // userText is declared earlier in the program 
// as the user's input. Setting this to lowercase
// so it doesn't say "a" and "A" are two different
// characters.
int uniqueChars = 0;
for (int i = 0; i < lengthText-1; i++) { // lengthText is declared earlier
// as userText.length();
if (userText.charAt(i) != userText.charAt(i+1))
uniqueChars++;
}
System.out.println("there are " + (uniqueChars + 1) + " unique characters in your string.");
}

最佳答案

这个怎么样?这是一个正则表达式解决方案而不是一个循环:

public static int countUniqueCharacters(String input)
{
String unique = input.replaceAll("(.)(?=.*?\\1)", "");
return unique.length();
}

如果程序需要不区分大小写,你可以用这个代替:

public static int countUniqueCharacters(String input)
{
String unique = input.replaceAll("(?i)(.)(?=.*?\\1)", "");
return unique.length();
}

您可以使用 return input.replaceAll(...).length();

将其设为单行方法

正则表达式解释:

  • . 匹配任何字符
  • (...) 创建一个捕获组,稍后引用
  • (?=...) 创建前瞻,在输入中向前看
  • .*? 匹配字符与其匹配项之间的任何内容(非贪婪匹配)
  • \\1 匹配第一个捕获组
  • (?i) 设置不区分大小写标志

因此,正则表达式将查找字符串中后面有重复的任何字符,然后 replaceAll 会将其替换为空字符串。因此,像 "cabbacbdbadbcabdaadcb" 这样的输入变成了 "adcb"(保留每个唯一字符的最后一个)。然后,对于包含唯一字符的字符串,该字符串的长度就是答案。

如果出于某种原因,您需要唯一字符字符串并且您需要它的原始顺序,您必须在剥离重复字符之前反转原始字符串(然后反转它完成后再次)。这将需要第三方库、StringBuffer 或循环。

关于java - 如何计算字符串中唯一字符的数量? - 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22646218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com