gpt4 book ai didi

r - 我们如何返回 R 中两个字符串中常见字符的数量?

转载 作者:行者123 更新时间:2023-12-05 00:51:36 25 4
gpt4 key购买 nike

我想搜索两个字符串并返回常见字符的个数。所以,如果我们有

s1 = "aabcc" 
s2 = "adcaa"

输出应该是solution(s1, s2) = 3。 (s1 和 s2 有 3 个常用字符 - 2 个“a”s 和 1 个“c”。)

我的想法是使用粘贴连接两个字符串,然后检查新字符串中每个不同字符的计数。如果计数是偶数,我会将计数的一半添加到计数变量中(因此,如果我们有四个 a,那么我们就有两对),如果某个字符的计数是奇数,那么我们会拿走一个并添加该数字的一半到我们的计数(有效地忽略了无法配对的字符的额外出现。

我想也许我可以通过将我们的字符放入一个记录每个字母计数的 data.frame 中来做到这一点,但是这样做的代码变得非常长:

df <- as.data.frame(paste(s1,s2,sep="") %>%
## keep first column only and name it 'characters':
select('characters' = 1) %>%
## multiple cell values (as separated by a blank)
## into separate rows:
separate_rows(characters, sep = " ") %>%
group_by(characters) %>%
summarise(count = n()) %>%
arrange(desc(count))

所以我现在认为我把整个事情复杂化了。谁能指出我正确的方向?我最初的想法是明智的还是离题了?

澄清:字符串的长度不一定相同,但它们的长度总是在 1 到 14 个字符之间。

澄清 2:理想情况下,解决方案将在 base R(无软件包)中,因为这是我首先要胜任的,但仍然欢迎所有其他解决方案

最佳答案

inner_join(as.data.frame(table(strsplit(s1, "") )),
as.data.frame(table(strsplit(s2, "") )),
by = "Var1") %>%
mutate(Freq.diff = pmin(Freq.x, Freq.y)) %>%
pull(Freq.diff) %>%
sum()

或者只使用基础 R:

df <- merge(as.data.frame(table(strsplit(s1, ""))),
as.data.frame(table(strsplit(s2, ""))),
by = 1)

sum(pmin(df$Freq.x, df$Freq.y))

关于r - 我们如何返回 R 中两个字符串中常见字符的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71587708/

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