实施算法以确定字符串是否具有所有唯一字符。如果您不能使用其他数据结构怎么办?
答案 0 :(得分:6)
如果你可以使用一点辅助内存,那么你需要的是一小部分位(用字符的数字代码索引)(如果你的字符是4字节的Unicode字符,你可能需要一个hashmap代替;-)。从0处的所有位开始:从开始扫描字符串 - 每次,如果与当前字符对应的位已经为1,则发现重复 - 否则,没有重复,将该位设置为1。是O(N)。
如果你不能分配任何额外的内存,但可以改变字符串,那么对字符串进行排序,然后执行传递以检查相邻的重复项是最好的,O(N log N)。
如果你不能分配额外的内存并且不能改变字符串,你需要一个O(N平方)检查,检查每个字符与以下所有字符。
答案 1 :(得分:2)
我们可以通过为每个字符分配一个素数来实现它...并将其与每个找到的字符相乘。然后在每个字符上检查该值是否可以被分配给该字符的数字整除..
答案 2 :(得分:2)
在c程序中回答
int is_uniq(char *str)
{
int i = 0, flag = 0, value = 0;
for(i = 0; i < strlen(str); i++) {
value = str[i] - 'a';
if(flag & (1 << value)) {
return 0;
}
flag |= (1 << value);
}
return 1;
}
答案 3 :(得分:1)
for each character in the string
if any subsequent character matches it
fail
succeed
答案 4 :(得分:0)
一种可能的解决方案 - 您可以将字符串提取为字符数组,对数组进行排序,然后循环遍历它,检查下一个字符是否等于当前字符。
答案 5 :(得分:0)
import java.io.*;
public class uniqueChar
{
boolean checkUniqueChar(String strin)
{
int m;
char []str=strin.toCharArray();
java.util.Arrays.sort(str);
for(int i=0;i<str.length-1;i++)
{
if(str[i]==str[i+1])
return false;
}
return true;
}
public static void main(String argv[]) throws IOException
{
String str;
System.out.println("enter the string\n");
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader bin=new BufferedReader(in);
str=bin.readLine();
System.out.println(new uniqueChar().checkUniqueChar(str));
}
}
答案 6 :(得分:0)
partik描述的素数方法(基于此theorem)。这是O(N)。
# one prime per letter
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101]
starting_byte = ?a.ord
primes_product = 1
ARGV[0].each_byte do |byte|
current_prime = primes[byte - starting_byte]
if primes_product % current_prime == 0
puts "Not unique"
exit
else
primes_product = primes_product * current_prime
end
end
puts "Unique"
答案 7 :(得分:0)
我在这个帖子中遇到了类似的问题,最后在C#中使用了以下解决方案:
var data = "ABCDEFGADFGHETFASAJUTE";
var hash = new Dictionary<char, int>();
foreach (char c in data)
{
if (hash.ContainsKey(c))
{
hash[c] += 1;
}
else
{
hash.Add(c, 1);
}
}
var Characters = hash.Keys.ToArray();
var Frequencies = hash.Values.ToArray();
答案 8 :(得分:-1)
public static boolean isUniqueChars(String str) {
int checker = 0;
for (int i = 0; i < str.length(); ++i) {
int val = str.charAt(i) - 'a';
if ((checker & (1 << val)) > 0)
return false;
checker |= (1 << val);
}
return true;
}