我意识到有许多答案只是简单地解决了如何在Java中实现它,但我正在寻找一种解决方案在概念上类似于我可能在Python程序中执行的实现,因为那是对我来说更为熟悉。
我的Java函数cgRatio
接受一个DNA字符串并遍历每个索引来计算字符串中“C”和“G”字符值的出现次数,并返回相对于字符串长度的比率。例如,如果我传递以下字符串作为函数的参数:
"ATGGCGCATTAA"
我会得到5/12的返回值或4.1666...
在Python中,这个函数可以写成:
def cgRatio(dna):
count = 0
for i in range(len(dna)):
if dna[i] == "C" or dna[i] == "G":
count += 1
return 1.0 * count/len(dna)
简单的print cgRatio("ATGGCGCATTAA")
将产生所需的结果。
我见过一些解决方案,例如取dna.charAt(i)
并将其转换回字符串或在函数开头实例化新的char
对象进行比较。对于这样一个简单的任务来说,这似乎过于复杂。 Python在这项任务中是否优越,还是有更有效的方法在Java中实现这一目标?
答案 0 :(得分:3)
简单的java代码是:
for (int i = 0; i < dna.length(); i++) {
char c = dna.charAt(i);
if (c == 'C' || c == 'G') {
count++;
}
}
return (double)count / dna.length();
绝对没有理由将字符转换为“字符串”以便比较它们!
如果您正在寻找“更少”的代码解决方案,您可以使用“for each”风格:
for (char c : dna.toCharArray()) {
易于理解,易于阅读,但代价是创建new char array。