给定一个长度为
字符串, 需要去除所有之前曾经出现过的字符,只保留第一次出现的字符
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
public String unique_string (String s) {
HashSet<Character> set = new HashSet<>();
char[] ch = s.toCharArray();
StringBuilder sb = new StringBuilder();
for (char c : ch) {
if (!set.contains(c)) {
set.add(c);
sb.append(c);
}
}
return sb.toString();
}
} if (s.indexOf(s.charAt(i)) == i)如果s的i位字符x不重复,s.indexOf(x)的索引值一定等于i
public String unique_string (String s) {
// write code here
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
if (s.indexOf(s.charAt(i)) == i) {
sb.append(s.charAt(i));
}
}
return sb.toString();
} 时间复杂度o(n) 空间复杂度o(H) h为去重后字符串长度 public static String unique_string (String s) {
long dic = 0;
StringBuilder sb = new StringBuilder();
for(int i = 0;i < s.length(); ++i) {
long c = 1L << s.charAt(i) - 'a';
if((dic & c) == 0){
sb.append(s.charAt(i));
dic |= c;
}
}
return sb.toString();
} /**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* unique_string(char* s ) {
int hash_xiaoxie[30]={0};
int hash_daxie[30]={0};
int len = strlen(s);
char *result=(char *)malloc(60*sizeof(char));
memset(result, 0, 60*sizeof(char));
int lable=0;
for(int i=0;i<len;i++){
if(s[i]<='z'&&s[i]>='a'){
int hash_lab=s[i]-'a';
if(hash_xiaoxie[hash_lab]==0){
hash_xiaoxie[hash_lab]=1;
result[lable++]=s[i];
}
}
if(s[i]<='Z'&&s[i]>='A'){
int hash_lab=s[i]-'A';
if(hash_daxie[hash_lab]==0){
hash_daxie[hash_lab]=1;
result[lable++]=s[i];
}
}
}
// write code here
//printf("%s\n",result);
return result;
}; hash表映射一下就行,因为字母的数量有限,所以也不需要太多额外空间
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
string unique_string(string s) {
// write code here
string ans = "";
unordered_set<char> st;
for (auto& c: s) {
if (st.find(c) != st.end()) continue;
st.insert(c);
ans.push_back(c);
}
return ans;
}
}; public String unique_string (String s) {
Set<Character> set = new HashSet<>();
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (!set.contains(c)){
set.add(c);
sb.append(c);
}
}
return sb.toString();
} 用数组表示,一个测试用例都过不去,但是在自己的IDE上可以过 public String unique_string (String s) {
int[] cnt = new int[128];
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
cnt[c]++;
if (cnt[c] > 1 || c < 97) {
continue;
}
sb.append(c);
}
return sb.toString();
} import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
public String unique_string (String s) {
// write code here
HashMap hashMap = new HashMap();
String news = new String();
for(int i=0;i<s.length();i++){
if(!hashMap.containsKey(s.substring(i,i+1))){
hashMap.put(s.substring(i,i+1),true);
news += s.substring(i,i+1);
}
}
return news;
}
} public String unique_string (String s) {
// write code here
HashSet<Character> charList = new HashSet<>();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if(charList.add(s.charAt(i))){
stringBuilder.append(s.charAt(i));
}
}
return stringBuilder.toString();
} import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串
*/
public String unique_string (String s) {
// write code here
if(s==null || s.length()<=1){
return s;
}
int [] bucket =new int [128];
char [] cs =s.toCharArray();
int len =cs.length;
StringBuilder sb =new StringBuilder();
for(int i =0;i<len;i++){
if(bucket[cs[i]]!=0){
continue;
}
sb.append(cs[i]);
bucket[cs[i]]++;
}
return sb.toString();
}
}