我编写了代码来查找字符串输入中的重复字符数量。但是在阅读完规范之后,我意识到这不是所要求的。是的,我需要计算重复的字符数,但不需要计算特定字符的数量,我需要重复所有字符的数量。
我已经给出了输入和输出以帮助解释更好。我不认为我做得很好。
输入: “abcdea”=> “a”重复=> 输出: 1
输入: “abcdeae”=> “a”和“e”重复=> 输出: 2
输入: “abcdeaed”=> “a”,“d”和“e”重复=> 输出: 3
我把我的代码放在下面。有人可以帮忙调整我的代码吗?
public static int duplicatesCount(String text)
{
Map<Character,Integer> map = new HashMap<Character,Integer>();
char[] carray = text.toCharArray();
for (char c : carray)
{
if (map.containsKey(c))
{
map.put(c, map.get(c) +1);
}
else
{
map.put(c, 1);
}
}
Set <Character> setChar = map.keySet();
int returnC = 1;
for (Character c : setChar)
{
if (map.get(c) > 1)
{
returnC = map.get(c);
}
}
return returnC;
答案 0 :(得分:2)
更好的方法是对字符串进行排序,然后迭代它。如果前一个字符=当前字符,则增加重复的数字,并且在看到字符更改后再次递增它。
这不需要额外的存储空间(例如哈希映射)。
这也可用于计算每个字母的重复数量,但稍作修改:)。
答案 1 :(得分:1)
每次遇到哈希映射中值大于1的字符时,只需计算。
int returnC = 0;
for (Character c : setChar)
{
if (map.get(c) > 1)
returnC++;
}
或者你可以在创建像这样的
的hashmap时这样做Map<Character,Integer> map = new HashMap<Character,Integer>();
char[] carray = text.toCharArray();
Set <Character> setChar = new Set<Character>(); //initialize the set up here
for (char c : carray)
{
if (map.containsKey(c))
{
map.put(c, map.get(c) +1);
setChar.add(c); //just add to set when a char already exists
}
else
{
map.put(c, 1);
}
}
return setChar.size(); //then simply return the size of the set
答案 2 :(得分:1)
在你的片段结束时......
int returnC = 0;
for (Character c : setChar)
{
if (map.get(c) > 1)
{
returnC ++; //for each which has more than one instance
}
}
return returnC;
答案 3 :(得分:0)
您可以使用String
方法
int count = 0;
String s = "abcdeabc";
while(s.length() > 0) {
String c = s.substring(0, 1);
if(s.lastIndexOf(c) != 0) {
count++;
}
s = s.replaceAll(c, "");
}
答案 4 :(得分:0)
这是另一种方法 - 不使用key
或排序算法。
Map
基本思想是遍历字符串char-by-char并检查字符是否存在于字符串中的某个位置(public static int duplicatesCount(String text) {
int cnt = 0;
while (text.length() > 1) {
char firstLetter = text.charAt(0);
if (text.lastIndexOf(firstLetter) > 0) {
cnt++;
text = text.replaceAll(("" + firstLetter), "");
} else {
text = text.substring(1, text.length());
}
}
return cnt;
}
)。如果它存在增量if (text.lastIndexOf(firstLetter) > 0)
,则删除字符串中出现的所有字符
否则,只需删除第一个字符(cnt
)
答案 5 :(得分:0)
在当前代码中,您返回的值不是计数。
例如:
如果你的输入是“abcdea”,那么returnC保持值2即为 密钥a重复的次数。
如果你的输入是“abcdabeb”,其中a重复两次,b重复 三次。您的输出将为3,因为returnC将保持密钥的值 湾
您可以像这样修改代码。
$Service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2013_SP1);
答案 6 :(得分:0)
我们还可以使用String Buffer类来创建另一个具有重复字符的字符串-然后我们可以显示它-
public static void main(String arghya[])
{
String name="ARGHYA MUKHERJEE";
StringBuffer duplicate=new StringBuffer();
Set<Character> charlist=new HashSet<Character>();
for(int i=0;i<name.length();i++) {
Character c=name.charAt(i);
if(charlist.contains(c))
{
duplicate.append(c);
//System.out.println(c+ " is repeatitive character in the string");
}
else {
charlist.add(c);
}
}
System.out.print("Duplicate characters which has appeared are as follows: "+duplicate);
}