From 60077083b7b7b7b5aa6dcdf61f335b86a6c106e6 Mon Sep 17 00:00:00 2001 From: Rishav Ranjan Date: Tue, 3 Oct 2023 02:49:48 +0530 Subject: [PATCH 1/3] checkpermutation in o(1) --- 1-Array-And-String/CheckPermutation.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/1-Array-And-String/CheckPermutation.cpp b/1-Array-And-String/CheckPermutation.cpp index 86f9cb1..99ee062 100644 --- a/1-Array-And-String/CheckPermutation.cpp +++ b/1-Array-And-String/CheckPermutation.cpp @@ -18,18 +18,14 @@ bool checkPermutation( string string1, string string2 ) { if( string1.length() != string2.length() ) { return false; } - int charMap[128] = {0}; - for( int i=0; i < string1.length(); i++ ) { - charMap[ string1[ i ] ]++; + int xorValue=0; + for(char ch : string1){ + xorValue^=ch; } - - for( int i=0; i < string2.length(); i++ ) { - if( charMap[ string2[ i ] ] == 0 ) { - return false; - } - charMap[ string2[ i ] ]--; + for(char ch : string2){ + xorValue^=ch; } - return true; + return xorValue==0; } bool checkPermutationUsingSorting( string input1, string input2 ) { From d2f3308278d66393ad4ebc4571d15908b882c2c1 Mon Sep 17 00:00:00 2001 From: Rishav Ranjan Date: Tue, 3 Oct 2023 02:59:13 +0530 Subject: [PATCH 2/3] duplicate in o(1) space and o(n^2) time --- 1-Array-And-String/IsUnique.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/1-Array-And-String/IsUnique.cpp b/1-Array-And-String/IsUnique.cpp index fb29b6a..10c7cc2 100644 --- a/1-Array-And-String/IsUnique.cpp +++ b/1-Array-And-String/IsUnique.cpp @@ -20,12 +20,11 @@ bool isDupUsingHashTable( string input ) { return true; } - bool map[ 128 ] = { false }; - for( int i=0; i < input.length(); i++ ) { - if( map[ input[ i ] ] == true ) - return true; - else - map[ input[ i ] ]= true; + for(int i=0;i Date: Tue, 3 Oct 2023 03:07:05 +0530 Subject: [PATCH 3/3] o(n) time --- 1-Array-And-String/PalindromePermutation.cpp | 36 +++++++------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/1-Array-And-String/PalindromePermutation.cpp b/1-Array-And-String/PalindromePermutation.cpp index 55199fe..e348b8e 100644 --- a/1-Array-And-String/PalindromePermutation.cpp +++ b/1-Array-And-String/PalindromePermutation.cpp @@ -11,33 +11,23 @@ using namespace std; bool canFormPalindrome( string input ) { - int charFreqCount[ 26 ] = {0}; + int charFreqCount[26] = {0}; - int charCount = 0; - for( int i = 0; i < input.length(); i++ ) { - if( input[ i ] == ' ' ) { - continue; + for (char c : input) { + if (isspace(c)) continue; + if (isalpha(c)) { + charFreqCount[tolower(c) - 'a']++; + } } - if( 'a' <= input[ i ] && input[ i ] <= 'z' ) { - charFreqCount[ input[ i ] - 'a' ]++; - charCount++; - continue; + + int oddCount = 0; + for (int i = 0; i < 26; i++) { + if (charFreqCount[i] % 2 != 0) { + oddCount++; + } } - if( 'A' <= input[ i ] && input[ i ] <= 'Z' ) { - charFreqCount[ input[ i ] - 'A' ]++; - charCount++; - } - } - - int oddCount = 0; - for( int i=0; i < 26; i++ ) { - if( charFreqCount[ i ] % 2 != 0 ) - oddCount++; - } - if( oddCount == 0 && charCount % 2 == 0 ) { - // when char count is even but oddCount is zero. - return true; + return oddCount <= 1; } if( charCount % 2 != 0 && oddCount == 1 ) {