diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 00000000..a7cdac76
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 00000000..c68c5dd9
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+Solution17.java
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 00000000..d83b5467
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 00000000..a94d8ee5
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 00000000..c8397c94
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/L2023110886_17_Test.class b/L2023110886_17_Test.class
new file mode 100644
index 00000000..767422d7
Binary files /dev/null and b/L2023110886_17_Test.class differ
diff --git a/L2023110886_17_Test.java b/L2023110886_17_Test.java
new file mode 100644
index 00000000..d2bc418a
--- /dev/null
+++ b/L2023110886_17_Test.java
@@ -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 result = s.findRepeatedDnaSequences("AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT");
+
+ List 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 result = s.findRepeatedDnaSequences("AAAAAAAAAAAAA");
+
+ List expected = Arrays.asList("AAAAAAAAAA");
+
+ assertEquals(expected, result);
+ }
+
+ /**
+ * 测试目的:
+ * 输入长度小于 10,期望返回空列表。
+ * 测试用例:
+ * s = "ACGT"
+ */
+ @Test
+ public void testLengthLessThanTen() {
+ Solution s = new Solution();
+ List result = s.findRepeatedDnaSequences("ACGT");
+
+ assertTrue(result.isEmpty());
+ }
+
+ /**
+ * 测试目的:
+ * 输入长度刚好为 10,不存在重复字符串。
+ * 测试用例:
+ * s = "ACGTACGTAC"
+ */
+ @Test
+ public void testLengthEqualTen() {
+ Solution s = new Solution();
+ List result = s.findRepeatedDnaSequences("ACGTACGTAC");
+
+ assertTrue(result.isEmpty());
+ }
+
+ /**
+ * 测试目的:
+ * 测试多个重复序列出现超过 2 次的情况。
+ * 测试用例:
+ * s = "AAAAACCCCCAAAAACCCCCAAAAACCCCC"
+ */
+ @Test
+ public void testRepeatsMoreThanTwice() {
+ Solution s = new Solution();
+ List result = s.findRepeatedDnaSequences("AAAAACCCCCAAAAACCCCCAAAAACCCCC");
+
+ List expected = Arrays.asList("AAAAACCCCC", "CCCCCAAAAA");
+
+ assertTrue(result.containsAll(expected));
+ }
+}
diff --git a/OSSDP-Lab2.iml b/OSSDP-Lab2.iml
new file mode 100644
index 00000000..1de981c3
--- /dev/null
+++ b/OSSDP-Lab2.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Solution$1.class b/Solution$1.class
new file mode 100644
index 00000000..b78ccc6c
Binary files /dev/null and b/Solution$1.class differ
diff --git a/Solution.class b/Solution.class
new file mode 100644
index 00000000..c9a9da79
Binary files /dev/null and b/Solution.class differ
diff --git a/Solution17.java b/Solution17.java
index 549d7adc..db6c3a48 100644
--- a/Solution17.java
+++ b/Solution17.java
@@ -1,43 +1,29 @@
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 bin = new HashMap() {{
+ static final Map bin = new HashMap() {{
put('A', 0);
put('C', 1);
put('G', 2);
- put('T', 3)
+ put('T', 3);
}};
public List findRepeatedDnaSequences(String s) {
- List ans[] = new ArrayList();
- int n = s.length;
+ List 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 cnt = new HashMap();
+
+ Map 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));
@@ -45,4 +31,4 @@ public List findRepeatedDnaSequences(String s) {
}
return ans;
}
-}
\ No newline at end of file
+}
diff --git a/hamcrest-core-1.3.jar b/hamcrest-core-1.3.jar
new file mode 100644
index 00000000..9d5fe16e
Binary files /dev/null and b/hamcrest-core-1.3.jar differ
diff --git a/junit-4.13.2.jar b/junit-4.13.2.jar
new file mode 100644
index 00000000..6da55d8b
Binary files /dev/null and b/junit-4.13.2.jar differ
diff --git a/out/production/OSSDP-Lab2/.idea/.gitignore b/out/production/OSSDP-Lab2/.idea/.gitignore
new file mode 100644
index 00000000..a7cdac76
--- /dev/null
+++ b/out/production/OSSDP-Lab2/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/out/production/OSSDP-Lab2/.idea/misc.xml b/out/production/OSSDP-Lab2/.idea/misc.xml
new file mode 100644
index 00000000..d83b5467
--- /dev/null
+++ b/out/production/OSSDP-Lab2/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/OSSDP-Lab2/.idea/modules.xml b/out/production/OSSDP-Lab2/.idea/modules.xml
new file mode 100644
index 00000000..a94d8ee5
--- /dev/null
+++ b/out/production/OSSDP-Lab2/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/OSSDP-Lab2/.idea/vcs.xml b/out/production/OSSDP-Lab2/.idea/vcs.xml
new file mode 100644
index 00000000..c8397c94
--- /dev/null
+++ b/out/production/OSSDP-Lab2/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/OSSDP-Lab2/OSSDP-Lab2.iml b/out/production/OSSDP-Lab2/OSSDP-Lab2.iml
new file mode 100644
index 00000000..1de981c3
--- /dev/null
+++ b/out/production/OSSDP-Lab2/OSSDP-Lab2.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/OSSDP-Lab2/README.md b/out/production/OSSDP-Lab2/README.md
new file mode 100644
index 00000000..10c5fcf9
--- /dev/null
+++ b/out/production/OSSDP-Lab2/README.md
@@ -0,0 +1 @@
+# OSSDP-Lab2
\ No newline at end of file