Skip to content

Instantly share code, notes, and snippets.

@octopitus
Last active June 6, 2016 12:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save octopitus/f9e5cd2bacffda09dc597a8dbe97913d to your computer and use it in GitHub Desktop.
Save octopitus/f9e5cd2bacffda09dc597a8dbe97913d to your computer and use it in GitHub Desktop.
String compression
function compressString(str) {
const arrayOfChars = str.split('')
let currentChar = arrayOfChars[0]
let timeOfAppear = 1
const mapOfChars = arrayOfChars.slice(1).reduce((result, value, index) => {
if (value === currentChar) {
timeOfAppear++
return result
}
result = result + timeOfAppear + value
currentChar = value
timeOfAppear = 1
return result
}, currentChar)
const compressString = mapOfChars + timeOfAppear
if (compressString.length > str.length && compressString !== str) {
return str
}
return compressString
}
console.log(compressString('aaaaaabbbbbccccc')) // a6b5c5
console.log(compressString('aaaaaaaaaa')) // a10
console.log(compressString('abcabcabc')) // abcabcabc
console.log(compressString('aaaaaasdddddd')) // a6s1d6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment