Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Determing if string has all unique characters

How can I do this without using arrays? I have this implementation, but I need to do it without using arrays, bit operations and any other C/C++ libraries.

bool IsCharDuplication(string s) {
  bool result = false;
  bool controlArray[256];
  for (int i = 0; i < s.length(); i++) {
    int val = s[i];
    if (controlArray[val] == true) {
      result = true;
      break;
    }
    controlArray[val] = true;
  }
  return result;
}
like image 853
ozdogan Avatar asked Jun 18 '26 15:06

ozdogan


2 Answers

Use two nested loop:

bool IsCharDuplication(string s)
{   
 for (int i = 0; i < s.length(); i++) 
    for (int j = i+1; j < s.length(); j++) 
      if (s[i] == s[j])
        return true;   
 return false;
}

Note: your algorithm has time of O(N), But my solution has time of O(N^2).

like image 122
ahoo Avatar answered Jun 21 '26 05:06

ahoo


You can do better than the O(N^2) algorithm suggested in the other answer.

For example, you can Quick-sort or Merge-sort the String in O(NlogN) and than do a single pass over the sorted String to determine if there are any duplicates in O(N). There total time complexity will be O(NlogN).

bool IsCharDuplication (string s)
{
  string s2 = sort(s);
  for (int i = 0; i < s.length () - 1; i++)
    if (s2[i] == s2[i+1])
      return true;
  return false;
}

I didn't include the code for sorting the string, but you can find such code easily and write your own sort method (since you are not allowed to use C/C++ libraries).

like image 30
Eran Avatar answered Jun 21 '26 03:06

Eran



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!