在過去一小時裏,我一直在絞盡腦汁想知道如何做到這一點。這更像是一個邏輯問題,而不是我想的技術問題。計算兩個字符串有多少個重複字符
我有兩個字符串,並希望統計他們有多少共同的字符。即艾米莉+安迪= 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