JavaScript Program to Check if Given String can be Split into Four Distinct Strings

A string can be split into four distinct strings by identifying specific delimiters or patterns within the original string and extracting substrings based on these divisions, resulting in four separate and non-overlapping text segments. In this article, we will check if a given string can be split into four distinct strings.

Table of Content

  • Using Regular Expression
  • Using Recursive Method
  • Using The Length Property
  • Using Sorting
  • Using Substring Method and Set

Using Regular Expression

In this approach, Regular Expression, or regex, is a pattern-matching technique used in programming to search, match, and manipulate text based on specific patterns or rules, enabling versatile text processing and validation.

It first checks if the string’s length is divisible by 4. If so, it uses regex to split the string into segments and checks if there are four unique segments.

Syntax:

const regex = new RegExp(`.{${inputString.length / 4}}`, 'g');

Example: In this example we are using above mentioned approach.

Javascript
const inputStr1 = "w3wiki";
const inputStr2 = "abcdefgh";

const checkSplittable = (inputString) => {
    return inputString.length % 4 !== 0
        ? false
        : (() => {
            const regex =
                    new RegExp(
                        `.{${inputString.length / 4}}`, 'g');
            const segments = 
                    inputString.match(regex);
            return segments && new Set(segments).size === 4;
        })();
};

console.log(`
    "${inputStr1}" is splittable: 
    ${checkSplittable(inputStr1)}`);
console.log(`
    "${inputStr2}" is splittable: 
    ${checkSplittable(inputStr2)}`);

Output
    "w3wiki" is splittable: 
    false

    "abcdefgh" is splittable: 
    true

Using Recursive Method

Here we are using recursive approach to determine if a given string can be split into four distinct substrings. It checks if a substring can be split further and maintains distinctness, returning “Yes” if possible, “No” otherwise.

Example: In this example we are using above mentioned approach.

Javascript
function isDistinct(s1, s2) {
    return s1.localeCompare(s2) !== 0;
}
function distinctStrings(s) {
    if (s.length < 4) {
        return false;
    }
    function splitAndCheck(s, val) {
        if (val === 0) {
            return true;
        }
        for (let i = 1; i < s.length; i++) {
            const s1 = s.substring(0, i);
            const s2 = s.substring(i);

            if (isDistinct(s1, s2)) {
                if (splitAndCheck(s2, val - 1)) {
                    return true;
                }
            }
        }
        return false;
    }
    return splitAndCheck(s, 4);
}

const inputStr = "w3wiki";
if (distinctStrings(inputStr)) {
    console.log("Yes");
} else {
    console.log("No");
}

Output
Yes

Using The Length Property

In this approach, we are using the length property to divide input strings into four equal segments. It checks if the length is divisible by 4 and creates substrings. It ensures each substring’s uniqueness and equal length, determining if the input can be split into four distinct strings.

Example: In this example, we check if a given string can be split into four equal-length, distinct substrings. It verifies divisibility by 4, creates substrings, and ensures uniqueness.

Javascript
let str1 = "w3wiki";
let str2 = "w3wikiExample";

function isDistinct(str) {
    if (str.length % 4 !== 0) {
        return false;
    }

    let length = str.length / 4;
    let substrings = {};

    let i = 0;
    for (const char of str) {
        if (i % length === 0) {
            let substring = str.substring(i, i + length);
            if (substrings[substring] || 
                substring.length !== length) {
                return false;
            }
            substrings[substring] = true;
        }
        i++;
    }

    return Object.keys(substrings).length === 4;
}

console.log(`String: "${str1}"`);
if (isDistinct(str1)) {
    console.log(`result: The string can be 
                split into four distinct strings.`);
} else {
    console.log(`result: The string cannot be 
        split into four distinct strings.`);
}

console.log(`\nString: "${str2}"`);
if (isDistinct(str2)) {
    console.log(`result: The string can be 
        split into four distinct strings.`);
} else {
    console.log(`result: The string cannot 
        be split into four distinct strings.`);
};

Output
String: "w3wiki"
result: The string cannot be 
        split into four distinct strings.

String: "w3wikiExample"
result: The string can be 
        split into four distinct strings.

Using Sorting

Using sorting, the approach generates all possible combinations of four substrings, sorts them, and checks if adjacent substrings are distinct. If all adjacent substrings are distinct, the string can be split into four distinct strings.

Example:

JavaScript
function canSplitIntoFourDistinctStrings(str) {
    let substrings = [];
    let n = str.length;
    for (let i = 1; i < n; i++) {
        for (let j = i + 1; j < n; j++) {
            for (let k = j + 1; k < n; k++) {
                let first = str.slice(0, i);
                let second = str.slice(i, j);
                let third = str.slice(j, k);
                let fourth = str.slice(k);
                substrings = [first, second, third, fourth];
                substrings.sort();
                if (substrings[0] !== substrings[1] && substrings[1] !== substrings[2] 
                && substrings[2] !== substrings[3]) {
                    return true;
                }
            }
        }
    }
    return false;
}

console.log(canSplitIntoFourDistinctStrings("abcdefgh")); // true
console.log(canSplitIntoFourDistinctStrings("abcdabcdabcdabcd")); // false

Output
true
true

Using Substring Method and Set

In this approach, we utilize the substring method to divide the string into four equal segments. We then store these segments in a set data structure, which automatically removes duplicate entries. By checking the size of the set, we can determine if the string can be split into four distinct substrings.

Example:

JavaScript
function canSplitIntoFourDistinctStrings(str) {
    if (str.length % 4 !== 0) {
        return false; // If the length is not divisible by 4, it cannot be split into four equal segments
    }
    
    const segmentLength = str.length / 4;
    const segments = new Set(); // Using Set to store unique segments
    
    for (let i = 0; i < str.length; i += segmentLength) {
        const segment = str.substring(i, i + segmentLength);
        segments.add(segment);
    }
    
    return segments.size === 4; // If there are four unique segments, return true
}

console.log(canSplitIntoFourDistinctStrings("abcdefgh")); 
console.log(canSplitIntoFourDistinctStrings("abcdabcdabcdabcd"));

Output
true
false