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