diff --git a/L2023111055_2_Test.java b/L2023111055_2_Test.java new file mode 100644 index 00000000..5ffc1869 --- /dev/null +++ b/L2023111055_2_Test.java @@ -0,0 +1,39 @@ +package com.ai; + +import org.junit.Test; + + +import static org.junit.Assert.assertEquals; + +public class L2023111055_2_Test{ + + @Test + public void testSolution2() + { + Solution2 solution = new Solution2(); + + // 测试目的:验证方法能否正确处理无重复字母的字符串 + // 测试用例:输入 "abc",期望输出 "abc" + assertEquals("abc", solution.removeDuplicateLetters("abc")); + + // 测试目的:验证方法能否正确处理有重复字母的字符串 + // 测试用例:输入 "bcabc",期望输出 "abc" + assertEquals("abc", solution.removeDuplicateLetters("bcabc")); + + // 测试目的:验证方法能否正确处理包含多个重复字母的字符串 + // 测试用例:输入 "cbacdcbc",期望输出 "acdb" + assertEquals("acdb", solution.removeDuplicateLetters("cbacdcbc")); + + // 测试目的:验证方法能否正确处理空字符串 + // 测试用例:输入 "",期望输出 "" + assertEquals("", solution.removeDuplicateLetters("")); + + // 测试目的:验证方法能否正确处理单个字符的字符串 + // 测试用例:输入 "a",期望输出 "a" + assertEquals("a", solution.removeDuplicateLetters("a")); + + // 测试目的:验证方法能否正确处理所有字符相同的字符串 + // 测试用例:输入 "aaa",期望输出 "a" + assertEquals("a", solution.removeDuplicateLetters("aaa")); + } +} \ No newline at end of file diff --git a/OSSDP-Lab2.iml b/OSSDP-Lab2.iml new file mode 100644 index 00000000..b107a2dd --- /dev/null +++ b/OSSDP-Lab2.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Solution2.java b/Solution2.java index 3218bd12..623c4c71 100644 --- a/Solution2.java +++ b/Solution2.java @@ -1,5 +1,7 @@ -/** - * @description: +package com.ai; + +/* + * /description: * * 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 * @@ -16,18 +18,18 @@ * 1 <= s.length <= 104 * s 由小写英文字母组成 */ -class Solution2 { +public class Solution2 { public String removeDuplicateLetters(String s) { boolean[] vis = new boolean[25]; int[] num = new int[25]; for (int i = 0; i < s.length(); i++) { - num[s.charAt(i) - ' ']++; + num[s.charAt(i) - 'a']++; } StringBuffer sb = new StringBuffer(); - for (int i = 0; i < s.length()+1; i++) { + for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); - if (!vis[ch - ' ']) { + if (!vis[ch - 'a']) { while (sb.length() > 0 && sb.charAt(sb.length() - 1) > ch) { if (num[sb.charAt(sb.length() - 1) - 'a'] > 0) { vis[sb.charAt(sb.length() - 1) - 'a'] = false; @@ -39,7 +41,7 @@ public String removeDuplicateLetters(String s) { vis[ch - 'a'] = true; sb.append(ch); } - num[ch - 'a'] += 1; + num[ch - 'a'] -= 1; } return sb.toString(); }