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

Can a tourist shoot a gun in the USA?

What episode was being referenced by this part of Discovery's season 2 episode 13 recap?

Why did I need to *reboot* to change my group membership

Why was Endgame Thanos so different than Infinity War Thanos?

Conditional probability - sum of dice is even given that at least one is a five

Quote from Leibniz

What are the holes in files created with fallocate?

Area under the curve - Integrals (Antiderivatives)

Longest Text in Latin

When a land becomes a creature, is it untapped?

Safety when modifying old electrical work

Could there be a material that inverts the colours seen through it?

Does Lawful Interception of 4G / the proposed 5G provide a back door for hackers as well?

On what legal basis did the UK remove the 'European Union' from its passport?

LWC1513: @salesforce/resourceUrl modules only support default imports

Ex-manager wants to stay in touch, I don't want to

Can't find the release for this wiring harness connector

Interior smooth regularity

Why does my circuit work on a breadboard, but not on a perfboard? I am new to soldering

Would an 8% reduction in drag outweigh the weight addition from this custom CFD-tested winglet?

Anabelian geometry ~ higher category theory

Program which behaves differently in/out of a debugger

Are there any established rules for splitting books into parts, chapters, sections etc?

Why is tomato paste so cheap?



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;








3












$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
    6 hours ago










  • $begingroup$
    @dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
    $endgroup$
    – LuminousNutria
    5 hours ago


















3












$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
    6 hours ago










  • $begingroup$
    @dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
    $endgroup$
    – LuminousNutria
    5 hours ago














3












3








3


1



$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 5 hours ago









200_success

132k20159426




132k20159426










asked 6 hours ago









LuminousNutriaLuminousNutria

22416




22416







  • 1




    $begingroup$
    How large are the Strings? The fastest solution would differ for many short Strings versus very large strings
    $endgroup$
    – dustytrash
    6 hours ago










  • $begingroup$
    @dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
    $endgroup$
    – LuminousNutria
    5 hours ago













  • 1




    $begingroup$
    How large are the Strings? The fastest solution would differ for many short Strings versus very large strings
    $endgroup$
    – dustytrash
    6 hours ago










  • $begingroup$
    @dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
    $endgroup$
    – LuminousNutria
    5 hours ago








1




1




$begingroup$
How large are the Strings? The fastest solution would differ for many short Strings versus very large strings
$endgroup$
– dustytrash
6 hours ago




$begingroup$
How large are the Strings? The fastest solution would differ for many short Strings versus very large strings
$endgroup$
– dustytrash
6 hours ago












$begingroup$
@dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
$endgroup$
– LuminousNutria
5 hours ago





$begingroup$
@dustytrash The range is from 1 to 24. The average length is 9. I've edited my question to mention this.
$endgroup$
– LuminousNutria
5 hours ago











2 Answers
2






active

oldest

votes


















2












$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$




















    2












    $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









      2












      $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$

















        2












        $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$















          2












          2








          2





          $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 3 hours ago









          Eric SteinEric Stein

          4,307613




          4,307613























              2












              $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$

















                2












                $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$















                  2












                  2








                  2





                  $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 3 hours ago









                  Hesham AttiaHesham Attia

                  71329




                  71329



























                      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

                      Log på Navigationsmenu

                      Creating second map without labels using QGIS?How to lock map labels for inset map in Print Composer?How to Force the Showing of Labels of a Vector File in QGISQGIS Valmiera, Labels only show for part of polygonsRemoving duplicate point labels in QGISLabeling every feature using QGIS?Show labels for point features outside map canvasAbbreviate Road Labels in QGIS only when requiredExporting map from composer in QGIS - text labels have moved in output?How to make sure labels in qgis turn up in layout map?Writing label expression with ArcMap and If then Statement?

                      Detroit Tigers Spis treści Historia | Skład zespołu | Sukcesy | Członkowie Baseball Hall of Fame | Zastrzeżone numery | Przypisy | Menu nawigacyjneEncyclopedia of Detroit - Detroit TigersTigers Stadium, Detroit, MITigers Timeline 1900sDetroit Tigers Team History & EncyclopediaTigers Timeline 1910s1935 World Series1945 World Series1945 World Series1984 World SeriesComerica Park, Detroit, MI2006 World Series2012 World SeriesDetroit Tigers 40-Man RosterDetroit Tigers Coaching StaffTigers Hall of FamersTigers Retired Numberse