gpt4 book ai didi

java - 在不同索引处的两个字符串中查找匹配字符

转载 作者:行者123 更新时间:2023-11-30 10:50:34 24 4
gpt4 key购买 nike

我是一名 C++ 程序员。出于兴趣,我正在开发一个 java 应用程序。

我在 java 中有两个字符串:

String word1 = "Fold";
String word2 = "Flow";

现在我需要一个函数来获取两个字符串中匹配字符的计数,但索引不同的字符串。字符串可以是任意长度,但两个词的长度始终相同。

添加:我们应该增加一个字符在两个单词中出现的次数。例如:abcd 和 xyaa 应该返回 1,但是 abca 和 xaay 应该返回 2。希望现在清楚了。

对于 ex:,上述示例的计数应为 2(仅考虑字母“o”和“l”。虽然字母“f”出现在两个单词中,但不考虑,因为它出现在两个字符串上的索引相同。

我的方法是创建两个 map 变量 Map 并将所有字符初始化为 0。然后计算每个字母在两个字符串中出现的次数,最后检查其中有多少个字符的计数大于 1。

例如:

    Map<Character, Integer> word_count_1 = createMap(); // initialize with a:0, b:0, c:0,...z:0
Map<Character, Integer> word_count_2 = createMap(); // initialize with a:0, b:0, c:0,...z:0

int count, value;

for (int i=0; i<word1.length(); i++)
{
if (word1.charAt(i) != word2.charAt(i))
{
value = word_count_1.get(word1.charAt(i));
word_count_1.put(word1.charAt(i), ++value);

value= word_count_2.get(word2.charAt(i));
word_count_2.put(word2.charAt(i), ++value);
}
}

Set set = word_count_2.entrySet();
Iterator i = set.iterator();
Map.Entry<Character, Integer> iter;

while(i.hasNext())
{
iter = (Map.Entry)i.next();
if ( (iter.getValue() > 0) && (word_count_1.get(iter.getKey())) > 0 )
{
count++; // This line has a bug. We shall ignore it for now
}
}

有没有其他更好的方法来获取计数而不是我正在尝试做的?我只是对自己所做的事情感觉不太好。

编辑:

行计数++(我提到有一个错误)应该更改为以下以给出正确的结果:

int letterCount1 = word_count_1.get(iter.getKey());
int letterCount2 = iter.getValue();
if ( (letterCount1 > 0) && (letterCount2 > 0 )
{
int minVal = letterCount1;
if (minVal > letterCount2)
minVal = letterCount2;
count+= minVal;
}

最佳答案

Java 8 解决方案

  public int duplicates(String wordOne, String wordTwo ){
Set<Character> charSet = new HashSet(109);
wordOne.chars().mapToObj(i -> (char)i).forEach(letter->charSet.add(letter));

int count = 0;
for(int i = 0; i < wordTwo.length(); i++)
if( charSet.contains(wordTwo.charAt(i)) && wordTwo.charAt(i) != wordOne.charAt(i) )
count++;

return count;
}

duplicates("Fold", "Flow"); // -> 2

关于java - 在不同索引处的两个字符串中查找匹配字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35025524/

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