Find hamming distance between two Strings of equal length in JavaEdit Distance Between Two StringsCalculating and displaying number statisticsAcquiring indices for anagrams of an input stringEdit distance between 2 stringsA sequence of mistakesAssignement on reading from stdin in CHamming distance between numbers in JavaScriptCalculation of Hamming distance between two adjacency listsHamming distanceJava class named HeadPhone to represent a headphone set

Could a 19.25mm revolver actually exist?

Why aren't space telescopes put in GEO?

What is a Centaur Thief's climbing speed?

Caught 2 students cheating together on the final exam that I proctored

What are these arcade games in Ghostbusters 1984?

Where can I find visible/radio telescopic observations of the center of the Milky Way galaxy?

Is real public IP Address hidden when using a system wide proxy in Windows 10?

What to keep in mind when telling an aunt how wrong her actions are, without creating further family conflict?

How to use libraries with delays inside within a time critical STM32 HAL application?

number headings

Where have Brexit voters gone?

Popcorn is the only acceptable snack to consume while watching a movie

Why does this if-statement combining assignment and an equality check return true?

Are these reasonable traits for someone with autism?

How to respond to an upset student?

The art of clickbait captions

How to know if a folder is a symbolic link?

NIntegrate doesn't evaluate

How do I partition a matrx into blocks and replace zeros with dots?

Python program to take in two strings and print the larger string

Did 20% of US soldiers in Vietnam use heroin, 95% of whom quit afterwards?

Boss wants me to falsify a report. How should I document this unethical demand?

Externally monitoring CPU/SSD activity without software access

Why did David Cameron offer a referendum on the European Union?



Find hamming distance between two Strings of equal length in Java


Edit Distance Between Two StringsCalculating and displaying number statisticsAcquiring indices for anagrams of an input stringEdit distance between 2 stringsA sequence of mistakesAssignement on reading from stdin in CHamming distance between numbers in JavaScriptCalculation of Hamming distance between two adjacency listsHamming distanceJava class named HeadPhone to represent a headphone set






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








5












$begingroup$


I have a private class that I want to be able to find the shortest Hamming Distance between two Strings of equal length in Java. The private class holds a char[] and contains a method to compare against other char arrays. It returns true if there is only a hamming distance of one.



The average length of the Strings used is 9 characters. They range from 1 to 24 characters.



Is there a way to make the isDistanceOne(char[]) method go any faster?



private class WordArray 

char[] word;

/**
* Creates a new WordArray object.
*
* @param word The word to add to the WordArray.
*/
private WordArray(String word)
this.word = word.toCharArray();


/**
* Returns whether the argument is within a Hamming Distance of one from
* the char[] contained in the WordArray.
*
* Both char[]s should be of the same length.
*
* @param otherWord The word to compare with this.word.
* @return boolean.
*/
private boolean isDistanceOne(char[] otherWord)

int count = 0;

for(int i = 0; i < otherWord.length; i++)
if (this.word[i] != otherWord[i])
count++;


return (count == 1);











share|improve this question











$endgroup$







  • 1




    $begingroup$
    How large are the Strings? The fastest solution would differ for many short Strings versus very large strings
    $endgroup$
    – dustytrash
    May 12 at 17:52










  • $begingroup$
    @dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
    $endgroup$
    – LuminousNutria
    May 12 at 18:04


















5












$begingroup$


I have a private class that I want to be able to find the shortest Hamming Distance between two Strings of equal length in Java. The private class holds a char[] and contains a method to compare against other char arrays. It returns true if there is only a hamming distance of one.



The average length of the Strings used is 9 characters. They range from 1 to 24 characters.



Is there a way to make the isDistanceOne(char[]) method go any faster?



private class WordArray 

char[] word;

/**
* Creates a new WordArray object.
*
* @param word The word to add to the WordArray.
*/
private WordArray(String word)
this.word = word.toCharArray();


/**
* Returns whether the argument is within a Hamming Distance of one from
* the char[] contained in the WordArray.
*
* Both char[]s should be of the same length.
*
* @param otherWord The word to compare with this.word.
* @return boolean.
*/
private boolean isDistanceOne(char[] otherWord)

int count = 0;

for(int i = 0; i < otherWord.length; i++)
if (this.word[i] != otherWord[i])
count++;


return (count == 1);











share|improve this question











$endgroup$







  • 1




    $begingroup$
    How large are the Strings? The fastest solution would differ for many short Strings versus very large strings
    $endgroup$
    – dustytrash
    May 12 at 17:52










  • $begingroup$
    @dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
    $endgroup$
    – LuminousNutria
    May 12 at 18:04














5












5








5


0



$begingroup$


I have a private class that I want to be able to find the shortest Hamming Distance between two Strings of equal length in Java. The private class holds a char[] and contains a method to compare against other char arrays. It returns true if there is only a hamming distance of one.



The average length of the Strings used is 9 characters. They range from 1 to 24 characters.



Is there a way to make the isDistanceOne(char[]) method go any faster?



private class WordArray 

char[] word;

/**
* Creates a new WordArray object.
*
* @param word The word to add to the WordArray.
*/
private WordArray(String word)
this.word = word.toCharArray();


/**
* Returns whether the argument is within a Hamming Distance of one from
* the char[] contained in the WordArray.
*
* Both char[]s should be of the same length.
*
* @param otherWord The word to compare with this.word.
* @return boolean.
*/
private boolean isDistanceOne(char[] otherWord)

int count = 0;

for(int i = 0; i < otherWord.length; i++)
if (this.word[i] != otherWord[i])
count++;


return (count == 1);











share|improve this question











$endgroup$




I have a private class that I want to be able to find the shortest Hamming Distance between two Strings of equal length in Java. The private class holds a char[] and contains a method to compare against other char arrays. It returns true if there is only a hamming distance of one.



The average length of the Strings used is 9 characters. They range from 1 to 24 characters.



Is there a way to make the isDistanceOne(char[]) method go any faster?



private class WordArray 

char[] word;

/**
* Creates a new WordArray object.
*
* @param word The word to add to the WordArray.
*/
private WordArray(String word)
this.word = word.toCharArray();


/**
* Returns whether the argument is within a Hamming Distance of one from
* the char[] contained in the WordArray.
*
* Both char[]s should be of the same length.
*
* @param otherWord The word to compare with this.word.
* @return boolean.
*/
private boolean isDistanceOne(char[] otherWord)

int count = 0;

for(int i = 0; i < otherWord.length; i++)
if (this.word[i] != otherWord[i])
count++;


return (count == 1);








java performance strings array edit-distance






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 12 at 18:21









200_success

132k20160427




132k20160427










asked May 12 at 17:50









LuminousNutriaLuminousNutria

23416




23416







  • 1




    $begingroup$
    How large are the Strings? The fastest solution would differ for many short Strings versus very large strings
    $endgroup$
    – dustytrash
    May 12 at 17:52










  • $begingroup$
    @dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
    $endgroup$
    – LuminousNutria
    May 12 at 18:04













  • 1




    $begingroup$
    How large are the Strings? The fastest solution would differ for many short Strings versus very large strings
    $endgroup$
    – dustytrash
    May 12 at 17:52










  • $begingroup$
    @dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
    $endgroup$
    – LuminousNutria
    May 12 at 18:04








1




1




$begingroup$
How large are the Strings? The fastest solution would differ for many short Strings versus very large strings
$endgroup$
– dustytrash
May 12 at 17:52




$begingroup$
How large are the Strings? The fastest solution would differ for many short Strings versus very large strings
$endgroup$
– dustytrash
May 12 at 17:52












$begingroup$
@dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
$endgroup$
– LuminousNutria
May 12 at 18:04





$begingroup$
@dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
$endgroup$
– LuminousNutria
May 12 at 18:04











2 Answers
2






active

oldest

votes


















9












$begingroup$

Given the limited context, and no information about where the hotspot is in the code, it's difficult to give concrete advice. Here are some musings for your consideration:



For ease of reading, it's preferable to have whitespace after control flow keywords and before the (.



It is suggested to always include curly braces, even when they're not required by the compiler.



Use final where possible to reduce cognitive load on the readers of your code.



word should be private.



There's no apparent reason to use char[] instead of just keeping a pointer to the original String. They're costing you time and space to make, to no benefit.



You can short-circuit out of your for loop if the count ever becomes greater than one. Unless a significant fraction of your inputs have a distance of one, you should see some performance gain here.



Using a boolean instead of an int might make a very small difference in execution time, but that would need to be tested. It also makes the code harder to read.



private class WordArray 

private final String word;

private WordArray(final String word)
this.word = word;


private boolean isDistanceOne(final char[] otherWord)
assert word.length() == otherWord.length;

int distance = 0;

for (int i = 0; i < otherWord.length; i++)
if (this.word.charAt(i) == otherWord[i])
continue;


if (distance > 0)
return false;


distance++;



return distance == 1;







share|improve this answer









$endgroup$




















    6












    $begingroup$

    I don't think you can beat that linear complexity since you need to look at each character to determine the Hamming distance.



    One small optimization you can do is to short-circuit once your count goes above one, but that adds an extra check in every iteration, so it might have worse runtime depending on the inputs.






    share|improve this answer









    $endgroup$













      Your Answer






      StackExchange.ifUsing("editor", function ()
      StackExchange.using("externalEditor", function ()
      StackExchange.using("snippets", function ()
      StackExchange.snippets.init();
      );
      );
      , "code-snippets");

      StackExchange.ready(function()
      var channelOptions =
      tags: "".split(" "),
      id: "196"
      ;
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function()
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled)
      StackExchange.using("snippets", function()
      createEditor();
      );

      else
      createEditor();

      );

      function createEditor()
      StackExchange.prepareEditor(
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader:
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      ,
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );













      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f220144%2ffind-hamming-distance-between-two-strings-of-equal-length-in-java%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      9












      $begingroup$

      Given the limited context, and no information about where the hotspot is in the code, it's difficult to give concrete advice. Here are some musings for your consideration:



      For ease of reading, it's preferable to have whitespace after control flow keywords and before the (.



      It is suggested to always include curly braces, even when they're not required by the compiler.



      Use final where possible to reduce cognitive load on the readers of your code.



      word should be private.



      There's no apparent reason to use char[] instead of just keeping a pointer to the original String. They're costing you time and space to make, to no benefit.



      You can short-circuit out of your for loop if the count ever becomes greater than one. Unless a significant fraction of your inputs have a distance of one, you should see some performance gain here.



      Using a boolean instead of an int might make a very small difference in execution time, but that would need to be tested. It also makes the code harder to read.



      private class WordArray 

      private final String word;

      private WordArray(final String word)
      this.word = word;


      private boolean isDistanceOne(final char[] otherWord)
      assert word.length() == otherWord.length;

      int distance = 0;

      for (int i = 0; i < otherWord.length; i++)
      if (this.word.charAt(i) == otherWord[i])
      continue;


      if (distance > 0)
      return false;


      distance++;



      return distance == 1;







      share|improve this answer









      $endgroup$

















        9












        $begingroup$

        Given the limited context, and no information about where the hotspot is in the code, it's difficult to give concrete advice. Here are some musings for your consideration:



        For ease of reading, it's preferable to have whitespace after control flow keywords and before the (.



        It is suggested to always include curly braces, even when they're not required by the compiler.



        Use final where possible to reduce cognitive load on the readers of your code.



        word should be private.



        There's no apparent reason to use char[] instead of just keeping a pointer to the original String. They're costing you time and space to make, to no benefit.



        You can short-circuit out of your for loop if the count ever becomes greater than one. Unless a significant fraction of your inputs have a distance of one, you should see some performance gain here.



        Using a boolean instead of an int might make a very small difference in execution time, but that would need to be tested. It also makes the code harder to read.



        private class WordArray 

        private final String word;

        private WordArray(final String word)
        this.word = word;


        private boolean isDistanceOne(final char[] otherWord)
        assert word.length() == otherWord.length;

        int distance = 0;

        for (int i = 0; i < otherWord.length; i++)
        if (this.word.charAt(i) == otherWord[i])
        continue;


        if (distance > 0)
        return false;


        distance++;



        return distance == 1;







        share|improve this answer









        $endgroup$















          9












          9








          9





          $begingroup$

          Given the limited context, and no information about where the hotspot is in the code, it's difficult to give concrete advice. Here are some musings for your consideration:



          For ease of reading, it's preferable to have whitespace after control flow keywords and before the (.



          It is suggested to always include curly braces, even when they're not required by the compiler.



          Use final where possible to reduce cognitive load on the readers of your code.



          word should be private.



          There's no apparent reason to use char[] instead of just keeping a pointer to the original String. They're costing you time and space to make, to no benefit.



          You can short-circuit out of your for loop if the count ever becomes greater than one. Unless a significant fraction of your inputs have a distance of one, you should see some performance gain here.



          Using a boolean instead of an int might make a very small difference in execution time, but that would need to be tested. It also makes the code harder to read.



          private class WordArray 

          private final String word;

          private WordArray(final String word)
          this.word = word;


          private boolean isDistanceOne(final char[] otherWord)
          assert word.length() == otherWord.length;

          int distance = 0;

          for (int i = 0; i < otherWord.length; i++)
          if (this.word.charAt(i) == otherWord[i])
          continue;


          if (distance > 0)
          return false;


          distance++;



          return distance == 1;







          share|improve this answer









          $endgroup$



          Given the limited context, and no information about where the hotspot is in the code, it's difficult to give concrete advice. Here are some musings for your consideration:



          For ease of reading, it's preferable to have whitespace after control flow keywords and before the (.



          It is suggested to always include curly braces, even when they're not required by the compiler.



          Use final where possible to reduce cognitive load on the readers of your code.



          word should be private.



          There's no apparent reason to use char[] instead of just keeping a pointer to the original String. They're costing you time and space to make, to no benefit.



          You can short-circuit out of your for loop if the count ever becomes greater than one. Unless a significant fraction of your inputs have a distance of one, you should see some performance gain here.



          Using a boolean instead of an int might make a very small difference in execution time, but that would need to be tested. It also makes the code harder to read.



          private class WordArray 

          private final String word;

          private WordArray(final String word)
          this.word = word;


          private boolean isDistanceOne(final char[] otherWord)
          assert word.length() == otherWord.length;

          int distance = 0;

          for (int i = 0; i < otherWord.length; i++)
          if (this.word.charAt(i) == otherWord[i])
          continue;


          if (distance > 0)
          return false;


          distance++;



          return distance == 1;








          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered May 12 at 20:15









          Eric SteinEric Stein

          4,465613




          4,465613























              6












              $begingroup$

              I don't think you can beat that linear complexity since you need to look at each character to determine the Hamming distance.



              One small optimization you can do is to short-circuit once your count goes above one, but that adds an extra check in every iteration, so it might have worse runtime depending on the inputs.






              share|improve this answer









              $endgroup$

















                6












                $begingroup$

                I don't think you can beat that linear complexity since you need to look at each character to determine the Hamming distance.



                One small optimization you can do is to short-circuit once your count goes above one, but that adds an extra check in every iteration, so it might have worse runtime depending on the inputs.






                share|improve this answer









                $endgroup$















                  6












                  6








                  6





                  $begingroup$

                  I don't think you can beat that linear complexity since you need to look at each character to determine the Hamming distance.



                  One small optimization you can do is to short-circuit once your count goes above one, but that adds an extra check in every iteration, so it might have worse runtime depending on the inputs.






                  share|improve this answer









                  $endgroup$



                  I don't think you can beat that linear complexity since you need to look at each character to determine the Hamming distance.



                  One small optimization you can do is to short-circuit once your count goes above one, but that adds an extra check in every iteration, so it might have worse runtime depending on the inputs.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered May 12 at 20:10









                  Hesham AttiaHesham Attia

                  79829




                  79829



























                      draft saved

                      draft discarded
















































                      Thanks for contributing an answer to Code Review Stack Exchange!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid


                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.

                      Use MathJax to format equations. MathJax reference.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f220144%2ffind-hamming-distance-between-two-strings-of-equal-length-in-java%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Wikipedia:Vital articles Мазмуну Biography - Өмүр баян Philosophy and psychology - Философия жана психология Religion - Дин Social sciences - Коомдук илимдер Language and literature - Тил жана адабият Science - Илим Technology - Технология Arts and recreation - Искусство жана эс алуу History and geography - Тарых жана география Навигация менюсу

                      Club Baloncesto Breogán Índice Historia | Pavillón | Nome | O Breogán na cultura popular | Xogadores | Adestradores | Presidentes | Palmarés | Historial | Líderes | Notas | Véxase tamén | Menú de navegacióncbbreogan.galCadroGuía oficial da ACB 2009-10, páxina 201Guía oficial ACB 1992, páxina 183. Editorial DB.É de 6.500 espectadores sentados axeitándose á última normativa"Estudiantes Junior, entre as mellores canteiras"o orixinalHemeroteca El Mundo Deportivo, 16 setembro de 1970, páxina 12Historia do BreogánAlfredo Pérez, o último canoneiroHistoria C.B. BreogánHemeroteca de El Mundo DeportivoJimmy Wright, norteamericano do Breogán deixará Lugo por ameazas de morteResultados de Breogán en 1986-87Resultados de Breogán en 1990-91Ficha de Velimir Perasović en acb.comResultados de Breogán en 1994-95Breogán arrasa al Barça. "El Mundo Deportivo", 27 de setembro de 1999, páxina 58CB Breogán - FC BarcelonaA FEB invita a participar nunha nova Liga EuropeaCharlie Bell na prensa estatalMáximos anotadores 2005Tempada 2005-06 : Tódolos Xogadores da Xornada""Non quero pensar nunha man negra, mais pregúntome que está a pasar""o orixinalRaúl López, orgulloso dos xogadores, presume da boa saúde económica do BreogánJulio González confirma que cesa como presidente del BreogánHomenaxe a Lisardo GómezA tempada do rexurdimento celesteEntrevista a Lisardo GómezEl COB dinamita el Pazo para forzar el quinto (69-73)Cafés Candelas, patrocinador del CB Breogán"Suso Lázare, novo presidente do Breogán"o orixinalCafés Candelas Breogán firma el mayor triunfo de la historiaEl Breogán realizará 17 homenajes por su cincuenta aniversario"O Breogán honra ao seu fundador e primeiro presidente"o orixinalMiguel Giao recibiu a homenaxe do PazoHomenaxe aos primeiros gladiadores celestesO home que nos amosa como ver o Breo co corazónTita Franco será homenaxeada polos #50anosdeBreoJulio Vila recibirá unha homenaxe in memoriam polos #50anosdeBreo"O Breogán homenaxeará aos seus aboados máis veteráns"Pechada ovación a «Capi» Sanmartín e Ricardo «Corazón de González»Homenaxe por décadas de informaciónPaco García volve ao Pazo con motivo do 50 aniversario"Resultados y clasificaciones""O Cafés Candelas Breogán, campión da Copa Princesa""O Cafés Candelas Breogán, equipo ACB"C.B. Breogán"Proxecto social"o orixinal"Centros asociados"o orixinalFicha en imdb.comMario Camus trata la recuperación del amor en 'La vieja música', su última película"Páxina web oficial""Club Baloncesto Breogán""C. B. Breogán S.A.D."eehttp://www.fegaba.com

                      What should I write in an apology letter, since I have decided not to join a company after accepting an offer letterShould I keep looking after accepting a job offer?What should I do when I've been verbally told I would get an offer letter, but still haven't gotten one after 4 weeks?Do I accept an offer from a company that I am not likely to join?New job hasn't confirmed starting date and I want to give current employer as much notice as possibleHow should I address my manager in my resignation letter?HR delayed background verification, now jobless as resignedNo email communication after accepting a formal written offer. How should I phrase the call?What should I do if after receiving a verbal offer letter I am informed that my written job offer is put on hold due to some internal issues?Should I inform the current employer that I am about to resign within 1-2 weeks since I have signed the offer letter and waiting for visa?What company will do, if I send their offer letter to another company