在过去一小时里,我一直在绞尽脑汁想知道如何做到这一点。这更像是一个逻辑问题,而不是我想的技术问题。计算两个字符串有多少个重复字符
我有两个字符串,并希望统计他们有多少共同的字符。即艾米莉+安迪= 1.
我以为我可以将字符串转换为字符数组,并使用两个For语句在对方通过每个可能性,但我不是100%我会怎么做。我搜索了谷歌的答案,但我没有得到任何地方。
我很抱歉没有提供任何代码,我目前没有任何代码。我对Java相当陌生,我不确定如何去解决这个问题。
任何人都有解决方案?
在过去一小时里,我一直在绞尽脑汁想知道如何做到这一点。这更像是一个逻辑问题,而不是我想的技术问题。计算两个字符串有多少个重复字符
我有两个字符串,并希望统计他们有多少共同的字符。即艾米莉+安迪= 1.
我以为我可以将字符串转换为字符数组,并使用两个For语句在对方通过每个可能性,但我不是100%我会怎么做。我搜索了谷歌的答案,但我没有得到任何地方。
我很抱歉没有提供任何代码,我目前没有任何代码。我对Java相当陌生,我不确定如何去解决这个问题。
任何人都有解决方案?
首先,您必须删除两个字符串中的重复字母,然后您必须进行比较。下面的代码工作正常。
public class CountDuplicates {
/**
* Author Krishnan
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = "palani";
String str2 = "krishnan";
String str11 = "";
String str12 = "";
char[] ch1 = str1.toCharArray();
char[] ch2 = str2.toCharArray();
int count = 0;
for(int i=0; i<ch1.length; i++)
{
if(!str11.contains(ch1[i]+""))
{
str11 += ch1[i];
}
}
for(int i=0; i<ch2.length; i++)
{
if(!str12.contains(ch2[i]+""))
{
str12 += ch2[i];
}
}
char[] ch11 = str11.toCharArray();
char[] ch12 = str12.toCharArray();
for(int i=0; i<ch11.length; i++)
{
for(int j=0; j<ch12.length; j++)
{
if(ch11[i] == ch12[j])
{
count++;
}
}
}
System.out.println("Duplicate Letters: " + count);
}
}
输出:
重复快报:3
谢谢,工作完美。 – CitizenSmif 2012-03-21 04:44:40
您可以将每个字符串转换为一个集合,然后执行一组交集,以找出字符可能共有的方式。这可能更容易理解。
你可以遍历第一个字符串把每个字符键一个Hashtable中以0
迭代的在第二个字符串值,如果字符是在哈希表,取代它与1
值迭代散列表并添加您的值。
下面的方法将在两个不同的字符串中打印通用字符。
public void compareString(String s1, String s2) {
List<Character> charList = new ArrayList<Character>();
int count = 0;
for(char c : S1.toCharArray()) {
if(!charList.contains(c)) {
INNER: for(char c1 : S2.toCharArray()) {
if(c == c1) {
count = count+1;
charList.add(c);
System.out.println(c1);
break INNER;
}
}
}
}
System.out.println("Duplicated Characters in two different strings :"+count);
}
如果两个字符串都包含一个重复的字符,说'a'两次,它会给出4的计数,并打印'一个'4次,这是我不正确的。 – gbulmer 2012-03-21 04:38:12
糟糕,你的正确gbulmer。感谢您指出这一点 – CitizenSmif 2012-03-21 04:39:02
感谢您通知我的错误。我根据您的建议修改了代码。再次感谢gbulmer – kandarp 2012-03-21 04:51:25
这肯定听起来像一个家庭作业......但如果不是这样,我会通过转换字符串的字符数组,写一个嵌套循环,每个字符进行比较和递增计数器解决这个问题时,匹配被发现。如果你只计算每个字母一次,那么算法会改变一点。
感谢您的评论。说实话不是功课,我现在还没有上过教育。 – CitizenSmif 2012-03-21 04:44:06
这看起来像功课。
的传统方法,它适用于大多数语言是:
完成的最后一个元素
String s1 = "abbccsartcc";
String s2 = "cbdcezxrtcc";
Set arrSet1 = new HashSet(convertToList(s1));
Set arrSet2 = new HashSet(convertToList(s2));
arrSet1.retainAll(arrSet2)
System.out.println("Similar characters-->" + arrSet1.size());
convertToList方法:
private static List convertToList(String str) {
List tempList = new ArrayList();
char[] arr = str.toCharArray();
for (char a : arr) {
tempList.add(String.valueOf(a));
}
return tempList;
}
这将完美地工作! HTH !!
您可以使用ArrayList来解决这个问题如下,我只是把这个在一起,真正的快,但它应该是一个良好的开端:
import java.util.ArrayList;
public class StringCount {
/**
* @param args
*/
public static void main(String[] args) {
// Get the strings from the command line or pass into method.
String name1 = "Emyyilyyyyy";
String name2 = "Andyyyy";
int count = 0;
ArrayList<String> cache = new ArrayList<String>();
for (int i = 0;i < name1.length();i++)
{
String check = name1.substring(i, i+1);
System.out.println("Letter to check: " + check);
if (name2.indexOf(check) != -1)
{
// Check to see if we already found the character so we don't count it again
if (!cache.contains(check))
{
System.out.println("Found: " + check + " in: " + name2);
cache.add(check);
count++;
}
}
}
System.out.println();
System.out.println("Count = " + count);
}
}
对于输入Emilyy和Andyy,你期待2或1作为结果? Emilyy和Andy怎么样? – 2012-03-21 04:07:51
这看起来像一个家庭作业。您所描述的方法将给出结果,但可能会有更多最佳解决方案。 – Jayan 2012-03-21 04:08:40
艾米特,这不重要,我宁愿它返回1。 Jayan - 不是作业,我想要更熟悉Android/Java,我正在写一个花哨的'个性配对应用程序',这将成为'公式'的一部分 – CitizenSmif 2012-03-21 04:12:44