Java 查找字符串是否唯一
我想使用hashtable来查找唯一的字符,因为它对我来说更有效,所以例如,hashtable中的hello应该是=>{h:1,e:1,l:2,o:1}&因为值大于1,所以字符串不是唯一的。我知道我可以用ascii方法计算唯一字符,但我想实现哈希表方法 请注意,我不想要正则表达式实现Java 查找字符串是否唯一,java,string,hashtable,Java,String,Hashtable,我想使用hashtable来查找唯一的字符,因为它对我来说更有效,所以例如,hashtable中的hello应该是=>{h:1,e:1,l:2,o:1}&因为值大于1,所以字符串不是唯一的。我知道我可以用ascii方法计算唯一字符,但我想实现哈希表方法 请注意,我不想要正则表达式实现 static void findHashUnique(String str) { Hashtable<Character, Integer> ht = new Hashtable<Char
static void findHashUnique(String str)
{
Hashtable<Character, Integer> ht = new Hashtable<Character, Integer>();
for(int i=0;i<str.length();i++)
{
int cnt=1;
if(!ht.containsKey(str.charAt(i)))
{
ht.put(str.charAt(i), cnt);
}
}
System.out.print(ht);
}
static void findHashUnique(字符串str)
{
Hashtable ht=新的Hashtable();
对于(int i=0;i要“修复”代码,请使用HashSet
,它在内部使用Hashtable
,但您不必知道或担心这一点。只需继续将字符添加到集合中,最后会留下一组唯一的字符
为了更容易达到目的:
String uniqueChars = str.replaceAll("(.)(?=.*\\1)", "");
要“修复”代码,请使用HashSet
,它在内部使用Hashtable
,但您不必知道或担心这一点。只需继续将字符添加到集合中,最后将留下一组唯一的字符
为了更容易达到目的:
String uniqueChars = str.replaceAll("(.)(?=.*\\1)", "");
这是我的方法
String string = "hello";
Hashtable<Character, Integer> map = new Hashtable<>();
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
System.out.println(map);
String=“你好”;
Hashtable map=新的Hashtable();
对于(int i=0;i
输出:{e=1,o=1,l=2,h=1}
这是我的方法
String string = "hello";
Hashtable<Character, Integer> map = new Hashtable<>();
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
System.out.println(map);
String=“你好”;
Hashtable map=新的Hashtable();
对于(int i=0;i
输出:{e=1,o=1,l=2,h=1}
嗯,我不知道您将要检查的字符编码是什么,但是如果您将自己限制为仅使用ASCII字符,则可以使用128个元素的简单数组
public static String uniqueLetters(String s) {
// storage for ascii characters
char[] letters = new char[128];
// mark counts of all letters
for(int i = 0; i < s.length(); i++) {
letters[ (int)s.charAt(i) ]++;
}
// find unique letters
String uniques = "";
for(int i = 0; i < letters.length; i++) {
if ( letters[i] == 1 ) {
uniques += Character.toString( (char)letters[i] );
}
}
return uniques;
}
公共静态字符串唯一字母(字符串s){
//ascii字符的存储
字符[]个字母=新字符[128];
//标记所有字母的计数
对于(int i=0;i
嗯,我不知道您将要检查的字符编码是什么,但是如果您将自己限制为仅使用ASCII字符,则可以使用128个元素的简单数组
public static String uniqueLetters(String s) {
// storage for ascii characters
char[] letters = new char[128];
// mark counts of all letters
for(int i = 0; i < s.length(); i++) {
letters[ (int)s.charAt(i) ]++;
}
// find unique letters
String uniques = "";
for(int i = 0; i < letters.length; i++) {
if ( letters[i] == 1 ) {
uniques += Character.toString( (char)letters[i] );
}
}
return uniques;
}
公共静态字符串唯一字母(字符串s){
//ascii字符的存储
字符[]个字母=新字符[128];
//标记所有字母的计数
对于(int i=0;i
只需使用哈希集(使用哈希表,但又如何)。哈希集删除重复项。我为什么要使用它?只需使用哈希集(使用哈希表,但又如何).HashSet删除重复项..我为什么要使用它?非常确定他想要每个字符的计数。我想通过计算每个字符的数量来确定字符串是否唯一character@fscoreregex匹配稍后在输入中再次出现的字符,通过对捕获的字符的前向引用断言,非常确定他想要每个字符的计数字符。我想通过计算每个character@fscore正则表达式匹配稍后在输入中再次出现的字符,由对捕获字符的前向引用断言。这是二次时间。在O(n)中不可能吗@fscore我不这么认为,根据比较的数量。你必须有线性时间和Hashmap吗?@fscore@fscore知识就是力量:@fscore你读过堆栈溢出链接吗?正如上面所说的那样,在这种方法中你没有要处理的同步。所以你应该使用Hashmap
,因为它性能更好(不必处理同步问题)。这是二次时间..在O(n)中不可能吗@fscore我不这么认为,根据比较的数量。你必须有线性时间和Hashmap吗?@fscore@fscore知识就是力量:@fscore你读过堆栈溢出链接吗?正如上面所说的那样,在这种方法中你没有要处理的同步。所以你应该使用Hashmap
,因为它性能更好(不必处理同步问题)。+1我有基本相同的想法,但在你比我早1分钟发布后删除=)+1我有基本相同的想法,但在你比我早1分钟发布后删除=)