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
39 changes: 39 additions & 0 deletions L2023111055_2_Test.java
Original file line number Diff line number Diff line change
@@ -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"));
}
}
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>
16 changes: 9 additions & 7 deletions Solution2.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
/**
* @description:
package com.ai;

/*
* /description:
*
* 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
*
Expand All @@ -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;
Expand All @@ -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();
}
Expand Down