Skip to content

Commit cccff58

Browse files
committed
Problem Solving
0 parents  commit cccff58

File tree

4 files changed

+341
-0
lines changed

4 files changed

+341
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
LC:151 : Reverse Words in a String
2+
https://leetcode.com/problems/reverse-words-in-a-string/
3+
//Using sstream Method that works as a split method of Java
4+
class Solution {
5+
public:
6+
string reverseWords(string s) {
7+
vector<string> res;
8+
9+
stringstream str(s);
10+
11+
string word;
12+
13+
string ans;
14+
15+
while(str>>word){
16+
res.push_back(word);
17+
}
18+
19+
for(int i = res.size()-1 ; i>=0 ;i--){
20+
ans =ans+" "+ res[i];
21+
}
22+
23+
ans.erase(0,1);
24+
25+
return ans;
26+
}
27+
};
28+
//Using without any Function
29+
/*
30+
class Solution {
31+
public:
32+
string reverseWords(string s) {
33+
stack<string>st;
34+
int start = 0;
35+
int end = s.length();
36+
while(s[start]==' '){
37+
start++;
38+
}
39+
while(s[end]==' '){
40+
end--;
41+
}
42+
for(int i = start ; i<end ; i++){
43+
string word = " ";
44+
while(i<end && s[i]!=' '){
45+
word = word + s[i];
46+
47+
i++;
48+
if(i==end){
49+
st.push(word);
50+
break;
51+
52+
}
53+
54+
if(s[i]==' ' && i<end){
55+
st.push(word);
56+
st.push("");
57+
}
58+
59+
60+
61+
}
62+
while(i<end && s[i+1]==' ' ){
63+
i++;
64+
}
65+
66+
}
67+
68+
string ans;
69+
while(!st.empty()){
70+
ans = ans + st.top();
71+
st.pop();
72+
73+
}
74+
ans.erase(0, 1);
75+
return ans;
76+
77+
}
78+
};
79+
*/

LC-15_ThreeSum.cpp

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
LC-15: Three Sum Problem
2+
https://leetcode.com/problems/3sum/
3+
//Brute Force Approach O(n^3)
4+
//TLE
5+
/*
6+
class Solution {
7+
public:
8+
vector<vector<int>> threeSum(vector<int>& nums) {
9+
//create set of vecto<int> type
10+
set<vector<int>> set ;
11+
12+
// Check if i!=j , i !=k , j!=k and sum to 0.
13+
for(int i = 0 ; i< nums.size()-2 ; i++){
14+
for(int j = 0 ; j<nums.size()-1 ;j++){
15+
for(int k=0 ; k<nums.size() ;k++){
16+
17+
if((i != j && i!=k && j!=k) && nums[i] + nums[j] + nums[k] == 0){
18+
//Creating vector with 3 values
19+
vector<int> v = {nums[i] , nums[j] , nums[k]};
20+
21+
//Sorting Vector
22+
sort(v.begin() , v.end());
23+
24+
//inserting into set of vector<int> type
25+
set.insert(v);
26+
}
27+
}
28+
}
29+
}
30+
//Copy set to vector of same type
31+
vector<vector<int>> res(set.begin() , set.end());
32+
33+
return res;
34+
35+
}
36+
};
37+
*/
38+
39+
// Two Pointer solution using Sorting TC : O(nlogn + n)
40+
41+
class Solution {
42+
public:
43+
vector<vector<int>> threeSum(vector<int>& nums) {
44+
set<vector<int>> set ;
45+
//Sort Vector
46+
sort(nums.begin() , nums.end());
47+
48+
for(int i =0 ; i< nums.size()-2 ;i++){
49+
50+
int start = i+1;
51+
int end = nums.size()-1;
52+
53+
while(start < end){
54+
int sum = nums[i] + nums[start] + nums[end];
55+
if(sum == 0){
56+
set.insert({nums[i] , nums[start++] , nums[end--]});
57+
}else if(sum < 0)
58+
start++;
59+
else
60+
end--;
61+
}
62+
}
63+
64+
vector<vector<int>> res(set.begin() , set.end());
65+
66+
return res;
67+
68+
}
69+
};

LC-1_TwoSum.cpp

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
//1. Problem : TwoSum :
2+
//LC: https://leetcode.com/problems/two-sum/
3+
4+
// BruteForce TC: O(n^2) , SC: O(1)
5+
/*class Solution {
6+
public:
7+
vector<int> twoSum(vector<int>& nums, int target) {
8+
vector<int> res;
9+
10+
for(int i = 0 ; i< nums.size()-1 ; i++){
11+
12+
for(int j = i+1 ; j<nums.size() ; j++){
13+
14+
if(nums[i]+nums[j] == target)
15+
res.push_back(i);
16+
res.push_back(j);
17+
18+
return res;
19+
}
20+
}
21+
22+
return res;
23+
}
24+
};*/
25+
26+
27+
// Sorting and Two Pointer TC: O(nlogn + n) , SC : O(1)
28+
/*
29+
class Solution {
30+
public:
31+
vector<int> twoSum(vector<int>& v, int target) {
32+
vector<int> res;
33+
34+
sort(v.begin() , v.end());
35+
36+
int start = 0 , end = v.size()-1;
37+
38+
while(start < end){
39+
40+
if(v[start] + v[end] < target)
41+
start++;
42+
else if(v[start]+v[end]>target)
43+
end--;
44+
else
45+
{
46+
res.push_back(start);
47+
res.push_back(end);
48+
49+
return res;
50+
}
51+
}
52+
53+
return res;
54+
}
55+
};*/
56+
57+
58+
// Using Unorder_map TC: O(n) , SC : O(1)
59+
60+
class Solution {
61+
public:
62+
vector<int> twoSum(vector<int>& v, int target) {
63+
// vector<int> res;
64+
unordered_map<int,int> mp;
65+
66+
for(int i = 0 ; i < v.size() ; i++){
67+
68+
if(mp.find(target - v[i]) == mp.end())
69+
mp.insert({v[i] , i});
70+
/* else
71+
{
72+
res.push_back(i);
73+
res.push_back(mp[target-v[i]]);
74+
75+
return res;
76+
}*/
77+
else
78+
return {i , mp[target-v[i]]} ;
79+
}
80+
//return res;
81+
return {};
82+
}
83+
};
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
//LC3 : Longest Substring without Repeating Character
2+
3+
4+
//BruteForce Approach : Enumerate over all the substring and check if there exists duplicate character
5+
// SC : O(n^3) , TC : O(k) where k is size of set
6+
//TLE
7+
/*class Solution {
8+
public:
9+
int lengthOfLongestSubstring(string s) {
10+
int res = 0;
11+
12+
for(int i = 0 ; i <s.length() ;i++){
13+
14+
for(int j = i ; j<s.length();j++ ){
15+
16+
if(checkDuplicate(s , i , j))
17+
res = max(res , j-i+1);
18+
}
19+
}
20+
21+
return res;
22+
}
23+
24+
bool checkDuplicate(string& s , int i , int j){
25+
// we will use unordered set to check duplicate character.
26+
27+
unordered_set<char> set;
28+
29+
while(i<=j){
30+
31+
char ch = s[i];
32+
33+
//set.count(ch) gives presence of character or not. returns either 0 or 1
34+
35+
if(set.count(ch))
36+
return false;
37+
set.insert(ch);
38+
}
39+
return true;
40+
}
41+
}; */
42+
43+
44+
45+
//Sliding Window Approach: Using Hash Map and Sliding Window Approach using 2 Pointers
46+
// TC : O(2n) , In worst case each element will be visited twice by left and right pointer
47+
// SC : O(k) , Size of HashMap
48+
49+
/*
50+
class Solution {
51+
public:
52+
int lengthOfLongestSubstring(string s) {
53+
int res = 0;
54+
unordered_map<char ,int> um;
55+
56+
int left = 0 , right = 0;
57+
58+
int len = s.length();
59+
60+
while(right < len){
61+
62+
char ch = s[right];
63+
um[ch]++;
64+
65+
while(um[ch] > 1){
66+
char chl = s[left];
67+
um[chl]--;
68+
left++;
69+
}
70+
71+
res = max(res , right - left + 1);
72+
73+
right++;
74+
}
75+
76+
return res;
77+
}
78+
}; */
79+
80+
// Approach Sliding Window but we can avoid 2n visits to n visits only by mapping in map
81+
// we have s[j] duplicate in range of (i,j) with index j' so we can directly move i to j'+1 instead of
82+
// moving slowly by 1 and check like above case
83+
84+
class Solution {
85+
public:
86+
int lengthOfLongestSubstring(string s) {
87+
int res = 0;
88+
vector<int> um(256, -1);
89+
90+
int left = 0 , right = 0;
91+
92+
while(right < s.length()){
93+
char ch = s[right];
94+
95+
if(um[ch]!=-1)
96+
left = max(left, um[ch] + 1);
97+
98+
99+
100+
std::cout<<res;
101+
102+
um[ch] = right;
103+
104+
res = max(res, right-left+1);
105+
106+
right++;
107+
}
108+
return res;
109+
}
110+
};

0 commit comments

Comments
 (0)