Skip to content

Commit cb53c8c

Browse files
committed
fix:Updated palindromePartition algorithm
1 parent 4bdaa5c commit cb53c8c

File tree

4 files changed

+86
-75
lines changed

4 files changed

+86
-75
lines changed

Backtracking/PalindromePartitioning.js

Lines changed: 0 additions & 46 deletions
This file was deleted.

Backtracking/tests/PalindromePartitioning.test.js

Lines changed: 0 additions & 29 deletions
This file was deleted.

Recursive/PalindromePartitioning.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* Problem Statement: Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s.
3+
* what is palindrome partitioning?
4+
* - Palindrome partitioning means, partitioning a string into substrings such that every substring is a palindrome.
5+
* Reference to know more about palindrome partitioning:
6+
* - https://www.cs.columbia.edu/~sedwards/classes/2021/4995-fall/proposals/Palindrome.pdf
7+
*/
8+
9+
// class PalindromePartitioning {
10+
// partition(s) {
11+
// const result = []
12+
// this.backtrack(s, [], result)
13+
// return result
14+
// }
15+
16+
// backtrack(s, path, result) {
17+
// if (s.length === 0) {
18+
// result.push([...path])
19+
// return
20+
// }
21+
22+
// for (let i = 0; i < s.length; i++) {
23+
// const prefix = s.substring(0, i + 1)
24+
// if (this.isPalindrome(prefix)) {
25+
// path.push(prefix)
26+
// this.backtrack(s.substring(i + 1), path, result)
27+
// path.pop()
28+
// }
29+
// }
30+
// }
31+
32+
// isPalindrome(s) {
33+
// let start = 0
34+
// let end = s.length - 1
35+
// while (start < end) {
36+
// if (s.charAt(start) !== s.charAt(end)) {
37+
// return false
38+
// }
39+
// start++
40+
// end--
41+
// }
42+
// return true
43+
// }
44+
// }
45+
46+
// export default PalindromePartitioning
47+
48+
// use a function instead of class and reuse existing palindrome function not isPalindrome function
49+
50+
import { palindrome } from './Palindrome'
51+
52+
const partitionPalindrome = (s) => {
53+
const result = []
54+
backtrack(s, [], result)
55+
return result
56+
}
57+
58+
const backtrack = (s, path, result) => {
59+
if (s.length === 0) {
60+
result.push([...path])
61+
return
62+
}
63+
64+
for (let i = 0; i < s.length; i++) {
65+
const prefix = s.substring(0, i + 1)
66+
if (palindrome(prefix)) {
67+
path.push(prefix)
68+
backtrack(s.substring(i + 1), path, result)
69+
path.pop()
70+
}
71+
}
72+
}
73+
74+
export default partitionPalindrome
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import partitionPalindrome from '../PalindromePartitioning'
2+
3+
describe('Palindrome Partitioning', () => {
4+
it('should return all possible palindrome partitioning of s', () => {
5+
expect(partitionPalindrome('aab')).toEqual([
6+
['a', 'a', 'b'],
7+
['aa', 'b']
8+
])
9+
expect(partitionPalindrome('a')).toEqual([['a']])
10+
expect(partitionPalindrome('ab')).toEqual([['a', 'b']])
11+
})
12+
})

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy