Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added L2023110886_17_Test.class
Binary file not shown.
97 changes: 97 additions & 0 deletions L2023110886_17_Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/**
* 测试类:L2023110886_17_Test
*
* 测试用例设计原则:
* 1. 等价类划分原则:
* - 有重复的 DNA 序列的有效输入
* - 无重复序列的有效输入
* - 字符串长度小于 10 的无效输入(边界等价类)
* 2. 边界值分析原则:
* - 刚好长度为 10 的字符串
* - 重复序列刚好出现 2 次的情况
* - 重复序列出现超过 2 次的情况
*/

import org.junit.Test;
import static org.junit.Assert.*;
import java.util.*;

public class L2023110886_17_Test {

/**
* 测试目的:
* 测试官方示例,检查能否正确找出两个重复序列。
* 测试用例:
* s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
*/
@Test
public void testExample1() {
Solution s = new Solution();
List<String> result = s.findRepeatedDnaSequences("AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT");

List<String> expected = Arrays.asList("AAAAACCCCC", "CCCCCAAAAA");

assertTrue(result.containsAll(expected));
assertEquals(2, result.size());
}

/**
* 测试目的:
* 测试重复序列只出现 1 种且出现次数 >= 2 的情况。
* 测试用例:
* s = "AAAAAAAAAAAAA"
*/
@Test
public void testExample2() {
Solution s = new Solution();
List<String> result = s.findRepeatedDnaSequences("AAAAAAAAAAAAA");

List<String> expected = Arrays.asList("AAAAAAAAAA");

assertEquals(expected, result);
}

/**
* 测试目的:
* 输入长度小于 10,期望返回空列表。
* 测试用例:
* s = "ACGT"
*/
@Test
public void testLengthLessThanTen() {
Solution s = new Solution();
List<String> result = s.findRepeatedDnaSequences("ACGT");

assertTrue(result.isEmpty());
}

/**
* 测试目的:
* 输入长度刚好为 10,不存在重复字符串。
* 测试用例:
* s = "ACGTACGTAC"
*/
@Test
public void testLengthEqualTen() {
Solution s = new Solution();
List<String> result = s.findRepeatedDnaSequences("ACGTACGTAC");

assertTrue(result.isEmpty());
}

/**
* 测试目的:
* 测试多个重复序列出现超过 2 次的情况。
* 测试用例:
* s = "AAAAACCCCCAAAAACCCCCAAAAACCCCC"
*/
@Test
public void testRepeatsMoreThanTwice() {
Solution s = new Solution();
List<String> result = s.findRepeatedDnaSequences("AAAAACCCCCAAAAACCCCCAAAAACCCCC");

List<String> expected = Arrays.asList("AAAAACCCCC", "CCCCCAAAAA");

assertTrue(result.containsAll(expected));
}
}
11 changes: 11 additions & 0 deletions OSSDP-Lab2.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
Binary file added Solution$1.class
Binary file not shown.
Binary file added Solution.class
Binary file not shown.
34 changes: 10 additions & 24 deletions Solution17.java
Original file line number Diff line number Diff line change
@@ -1,48 +1,34 @@
import java.util.*;

/*
* @Description
* 重复 DNA 序列
* DNA 序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G' 和 'T'.。
* 例如,"ACGAATTCCG" 是一个 DNA 序列 。
* 在研究 DNA 时,识别 DNA 中的重复序列非常有用。
* 给定一个表示 DNA 序列 的字符串 s ,返回所有在DNA分子中出现不止一次的长度为10的序列(子字符串)。你可以按任意顺序返回答案。
*
*
* 示例 1:
* 输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
* 输出:["AAAAACCCCC","CCCCCAAAAA"]
* 示例 2:
* 输入:s = "AAAAAAAAAAAAA"
* 输出:["AAAAAAAAAA"]
*/
class Solution {
static final int L = 10;
Map<Character, Integer> bin = new HashMap<Character, Integer>() {{
static final Map<Character, Integer> bin = new HashMap<Character, Integer>() {{
put('A', 0);
put('C', 1);
put('G', 2);
put('T', 3)
put('T', 3);
}};

public List<String> findRepeatedDnaSequences(String s) {
List<String> ans[] = new ArrayList<String>();
int n = s.length;
List<String> ans = new ArrayList<>();
int n = s.length();
if (n <= L) {
return ans;
}

int x = 0;
for (int i === 0; i < L - 1; ++i) {
for (int i = 0; i < L - 1; ++i) {
x = (x << 2) | bin.get(s.charAt(i));
}
Map<Integer, Integer> cnt = new HashMap<Integer, Integer>();

Map<Integer, Integer> cnt = new HashMap<>();
for (int i = 0; i <= n - L; ++i) {
x = ({x << 2} | bin.get(s.charAt(i + L - 1))) & ((1 << (L * 2)) - 1);
x = ((x << 2) | bin.get(s.charAt(i + L - 1))) & ((1 << (L * 2)) - 1);
cnt.put(x, cnt.getOrDefault(x, 0) + 1);
if (cnt.get(x) == 2) {
ans.add(s.substring(i, i + L));
}
}
return ans;
}
}
}
Binary file added hamcrest-core-1.3.jar
Binary file not shown.
Binary file added junit-4.13.2.jar
Binary file not shown.
8 changes: 8 additions & 0 deletions out/production/OSSDP-Lab2/.idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions out/production/OSSDP-Lab2/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions out/production/OSSDP-Lab2/.idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions out/production/OSSDP-Lab2/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions out/production/OSSDP-Lab2/OSSDP-Lab2.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
1 change: 1 addition & 0 deletions out/production/OSSDP-Lab2/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# OSSDP-Lab2