Longest common substring in linear timeComputing the longest common substring of two strings using suffix arraysFind longest common substring using a rolling hashWhich algorithm to use to find all common substring (LCS case) with really big stringsFinding the longest repeating subsequenceHow to find longest recurring pattern from lage string data set?Longest substring with consecutive repetitionsDoes the Longest Common Subsequence problem reduce to its binary version?Substring problems in suffix treesNumber of optimal solutions for Longest Common Subsequence (Substring) problemLongest common sequence matrix giving wrong answer
Has any country ever had 2 former presidents in jail simultaneously?
Is it possible to have a strip of cold climate in the middle of a planet?
Are the IPv6 address space and IPv4 address space completely disjoint?
Closed-form expression for certain product
Is this toilet slogan correct usage of the English language?
The IT department bottlenecks progress. How should I handle this?
On a tidally locked planet, would time be quantized?
Electoral considerations aside, what are potential benefits, for the US, of policy changes proposed by the tweet recognizing Golan annexation?
Are paving bricks differently sized for sand bedding vs mortar bedding?
Is it better practice to read straight from sheet music rather than memorize it?
How to indicate a cut out for a product window
2.8 Why are collections grayed out? How can I open them?
Symbol used to indicate indivisibility
Must Legal Documents Be Siged In Standard Pen Colors?
Can I sign legal documents with a smiley face?
How can "mimic phobia" be cured or prevented?
Offered money to buy a house, seller is asking for more to cover gap between their listing and mortgage owed
Loading commands from file
Open a doc from terminal, but not by its name
Why does the Sun have different day lengths, but not the gas giants?
How to implement a feedback to keep the DC gain at zero for this conceptual passive filter?
Is there a name for this algorithm to calculate the concentration of a mixture of two solutions containing the same solute?
Problem with TransformedDistribution
What should you do if you miss a job interview (deliberately)?
Longest common substring in linear time
Computing the longest common substring of two strings using suffix arraysFind longest common substring using a rolling hashWhich algorithm to use to find all common substring (LCS case) with really big stringsFinding the longest repeating subsequenceHow to find longest recurring pattern from lage string data set?Longest substring with consecutive repetitionsDoes the Longest Common Subsequence problem reduce to its binary version?Substring problems in suffix treesNumber of optimal solutions for Longest Common Subsequence (Substring) problemLongest common sequence matrix giving wrong answer
$begingroup$
We know that the longest common substring of two strings can be found in O(N^2) time complexity.
Can a solution be found in only linear time?
algorithms time-complexity strings longest-common-substring
$endgroup$
add a comment |
$begingroup$
We know that the longest common substring of two strings can be found in O(N^2) time complexity.
Can a solution be found in only linear time?
algorithms time-complexity strings longest-common-substring
$endgroup$
add a comment |
$begingroup$
We know that the longest common substring of two strings can be found in O(N^2) time complexity.
Can a solution be found in only linear time?
algorithms time-complexity strings longest-common-substring
$endgroup$
We know that the longest common substring of two strings can be found in O(N^2) time complexity.
Can a solution be found in only linear time?
algorithms time-complexity strings longest-common-substring
algorithms time-complexity strings longest-common-substring
edited 1 hour ago
Discrete lizard♦
4,44011537
4,44011537
asked 1 hour ago
Manoharsinh RanaManoharsinh Rana
917
917
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
$begingroup$
Yes, the longest common substring of two strings can be found in $O(m+n)$ time, where $m$ and $n$ are the lengths of the two strings, assuming the size of the alphabet is constant.
Here is an excerpt from https://en.wikipedia.org/wiki/Longest_common_substring_problem.
The longest common substrings of a set of strings can be found by building a generalized suffix tree for the strings, and then finding the deepest internal nodes which have leaf nodes from all the strings in the subtree below it.
Building a generalized suffix tree for two given strings takes $Theta(m+n)$ time using the famous ingenious Ukkonen's algorithm. Finding the deepest internal nodes that come from both strings takes $Theta(m+n)$ time. Hence we can find the longest common substring in $Theta(m+n)$ time.
$endgroup$
$begingroup$
I did not see @D.W's answer, possibly because I was interrupted while writing my answer.
$endgroup$
– Apass.Jack
15 mins ago
add a comment |
$begingroup$
It is unlikely that that a better algorithm than quadratic exists, let alone linear. For the related problem of finding subsequences, this is a known result: In the paper "Tight hardness results for LCS and other sequence similarity measures." by Abboud et al. , they show that the existence of an algorithm with a running time of $O(n^2-varepsilon)$, for some $varepsilon>0$ refutes the Strong Exponential Time Hypothesis (SETH).
SETH is considered to be very likely true (although not universally accepted), so it is unlikely any $O(n^2-varepsilon)$ time algorithm exists.
While finding a substring is a slightly different problem, it seems likely to be equally hard.
$endgroup$
$begingroup$
are you talking about subsequence? I am talking about substring.
$endgroup$
– Manoharsinh Rana
1 hour ago
$begingroup$
@ManoharsinhRana Ah, I see. The problems are similar, and it is hard to find results for the string variant. I think there are similar results for the substring problem, but they are not easy to find. You could try looking at papers that cite "Quadratic conditional lower bounds for string problems and dynamic time warping" by Bringmann and Künnemann, as their program lead to a lot of results related to this problem.
$endgroup$
– Discrete lizard♦
1 hour ago
$begingroup$
Longest common substring is much easier than longest common subsequence. See my answer.
$endgroup$
– D.W.♦
17 mins ago
add a comment |
$begingroup$
Yes. There's even a Wikipedia article about it! https://en.wikipedia.org/wiki/Longest_common_substring_problem
In particular, as Wikipedia explains, there is a linear-time algorithm, using suffix trees (or suffix arrays).
Searching on "longest common substring" turns up that Wikipedia article as the first hit (for me). In the future, please research the problem before asking here. (See, e.g., https://meta.stackoverflow.com/q/261592/781723.)
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
);
);
, "mathjax-editing");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "419"
;
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcs.stackexchange.com%2fquestions%2f105969%2flongest-common-substring-in-linear-time%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Yes, the longest common substring of two strings can be found in $O(m+n)$ time, where $m$ and $n$ are the lengths of the two strings, assuming the size of the alphabet is constant.
Here is an excerpt from https://en.wikipedia.org/wiki/Longest_common_substring_problem.
The longest common substrings of a set of strings can be found by building a generalized suffix tree for the strings, and then finding the deepest internal nodes which have leaf nodes from all the strings in the subtree below it.
Building a generalized suffix tree for two given strings takes $Theta(m+n)$ time using the famous ingenious Ukkonen's algorithm. Finding the deepest internal nodes that come from both strings takes $Theta(m+n)$ time. Hence we can find the longest common substring in $Theta(m+n)$ time.
$endgroup$
$begingroup$
I did not see @D.W's answer, possibly because I was interrupted while writing my answer.
$endgroup$
– Apass.Jack
15 mins ago
add a comment |
$begingroup$
Yes, the longest common substring of two strings can be found in $O(m+n)$ time, where $m$ and $n$ are the lengths of the two strings, assuming the size of the alphabet is constant.
Here is an excerpt from https://en.wikipedia.org/wiki/Longest_common_substring_problem.
The longest common substrings of a set of strings can be found by building a generalized suffix tree for the strings, and then finding the deepest internal nodes which have leaf nodes from all the strings in the subtree below it.
Building a generalized suffix tree for two given strings takes $Theta(m+n)$ time using the famous ingenious Ukkonen's algorithm. Finding the deepest internal nodes that come from both strings takes $Theta(m+n)$ time. Hence we can find the longest common substring in $Theta(m+n)$ time.
$endgroup$
$begingroup$
I did not see @D.W's answer, possibly because I was interrupted while writing my answer.
$endgroup$
– Apass.Jack
15 mins ago
add a comment |
$begingroup$
Yes, the longest common substring of two strings can be found in $O(m+n)$ time, where $m$ and $n$ are the lengths of the two strings, assuming the size of the alphabet is constant.
Here is an excerpt from https://en.wikipedia.org/wiki/Longest_common_substring_problem.
The longest common substrings of a set of strings can be found by building a generalized suffix tree for the strings, and then finding the deepest internal nodes which have leaf nodes from all the strings in the subtree below it.
Building a generalized suffix tree for two given strings takes $Theta(m+n)$ time using the famous ingenious Ukkonen's algorithm. Finding the deepest internal nodes that come from both strings takes $Theta(m+n)$ time. Hence we can find the longest common substring in $Theta(m+n)$ time.
$endgroup$
Yes, the longest common substring of two strings can be found in $O(m+n)$ time, where $m$ and $n$ are the lengths of the two strings, assuming the size of the alphabet is constant.
Here is an excerpt from https://en.wikipedia.org/wiki/Longest_common_substring_problem.
The longest common substrings of a set of strings can be found by building a generalized suffix tree for the strings, and then finding the deepest internal nodes which have leaf nodes from all the strings in the subtree below it.
Building a generalized suffix tree for two given strings takes $Theta(m+n)$ time using the famous ingenious Ukkonen's algorithm. Finding the deepest internal nodes that come from both strings takes $Theta(m+n)$ time. Hence we can find the longest common substring in $Theta(m+n)$ time.
answered 19 mins ago
Apass.JackApass.Jack
13.3k1939
13.3k1939
$begingroup$
I did not see @D.W's answer, possibly because I was interrupted while writing my answer.
$endgroup$
– Apass.Jack
15 mins ago
add a comment |
$begingroup$
I did not see @D.W's answer, possibly because I was interrupted while writing my answer.
$endgroup$
– Apass.Jack
15 mins ago
$begingroup$
I did not see @D.W's answer, possibly because I was interrupted while writing my answer.
$endgroup$
– Apass.Jack
15 mins ago
$begingroup$
I did not see @D.W's answer, possibly because I was interrupted while writing my answer.
$endgroup$
– Apass.Jack
15 mins ago
add a comment |
$begingroup$
It is unlikely that that a better algorithm than quadratic exists, let alone linear. For the related problem of finding subsequences, this is a known result: In the paper "Tight hardness results for LCS and other sequence similarity measures." by Abboud et al. , they show that the existence of an algorithm with a running time of $O(n^2-varepsilon)$, for some $varepsilon>0$ refutes the Strong Exponential Time Hypothesis (SETH).
SETH is considered to be very likely true (although not universally accepted), so it is unlikely any $O(n^2-varepsilon)$ time algorithm exists.
While finding a substring is a slightly different problem, it seems likely to be equally hard.
$endgroup$
$begingroup$
are you talking about subsequence? I am talking about substring.
$endgroup$
– Manoharsinh Rana
1 hour ago
$begingroup$
@ManoharsinhRana Ah, I see. The problems are similar, and it is hard to find results for the string variant. I think there are similar results for the substring problem, but they are not easy to find. You could try looking at papers that cite "Quadratic conditional lower bounds for string problems and dynamic time warping" by Bringmann and Künnemann, as their program lead to a lot of results related to this problem.
$endgroup$
– Discrete lizard♦
1 hour ago
$begingroup$
Longest common substring is much easier than longest common subsequence. See my answer.
$endgroup$
– D.W.♦
17 mins ago
add a comment |
$begingroup$
It is unlikely that that a better algorithm than quadratic exists, let alone linear. For the related problem of finding subsequences, this is a known result: In the paper "Tight hardness results for LCS and other sequence similarity measures." by Abboud et al. , they show that the existence of an algorithm with a running time of $O(n^2-varepsilon)$, for some $varepsilon>0$ refutes the Strong Exponential Time Hypothesis (SETH).
SETH is considered to be very likely true (although not universally accepted), so it is unlikely any $O(n^2-varepsilon)$ time algorithm exists.
While finding a substring is a slightly different problem, it seems likely to be equally hard.
$endgroup$
$begingroup$
are you talking about subsequence? I am talking about substring.
$endgroup$
– Manoharsinh Rana
1 hour ago
$begingroup$
@ManoharsinhRana Ah, I see. The problems are similar, and it is hard to find results for the string variant. I think there are similar results for the substring problem, but they are not easy to find. You could try looking at papers that cite "Quadratic conditional lower bounds for string problems and dynamic time warping" by Bringmann and Künnemann, as their program lead to a lot of results related to this problem.
$endgroup$
– Discrete lizard♦
1 hour ago
$begingroup$
Longest common substring is much easier than longest common subsequence. See my answer.
$endgroup$
– D.W.♦
17 mins ago
add a comment |
$begingroup$
It is unlikely that that a better algorithm than quadratic exists, let alone linear. For the related problem of finding subsequences, this is a known result: In the paper "Tight hardness results for LCS and other sequence similarity measures." by Abboud et al. , they show that the existence of an algorithm with a running time of $O(n^2-varepsilon)$, for some $varepsilon>0$ refutes the Strong Exponential Time Hypothesis (SETH).
SETH is considered to be very likely true (although not universally accepted), so it is unlikely any $O(n^2-varepsilon)$ time algorithm exists.
While finding a substring is a slightly different problem, it seems likely to be equally hard.
$endgroup$
It is unlikely that that a better algorithm than quadratic exists, let alone linear. For the related problem of finding subsequences, this is a known result: In the paper "Tight hardness results for LCS and other sequence similarity measures." by Abboud et al. , they show that the existence of an algorithm with a running time of $O(n^2-varepsilon)$, for some $varepsilon>0$ refutes the Strong Exponential Time Hypothesis (SETH).
SETH is considered to be very likely true (although not universally accepted), so it is unlikely any $O(n^2-varepsilon)$ time algorithm exists.
While finding a substring is a slightly different problem, it seems likely to be equally hard.
edited 1 hour ago
answered 1 hour ago
Discrete lizard♦Discrete lizard
4,44011537
4,44011537
$begingroup$
are you talking about subsequence? I am talking about substring.
$endgroup$
– Manoharsinh Rana
1 hour ago
$begingroup$
@ManoharsinhRana Ah, I see. The problems are similar, and it is hard to find results for the string variant. I think there are similar results for the substring problem, but they are not easy to find. You could try looking at papers that cite "Quadratic conditional lower bounds for string problems and dynamic time warping" by Bringmann and Künnemann, as their program lead to a lot of results related to this problem.
$endgroup$
– Discrete lizard♦
1 hour ago
$begingroup$
Longest common substring is much easier than longest common subsequence. See my answer.
$endgroup$
– D.W.♦
17 mins ago
add a comment |
$begingroup$
are you talking about subsequence? I am talking about substring.
$endgroup$
– Manoharsinh Rana
1 hour ago
$begingroup$
@ManoharsinhRana Ah, I see. The problems are similar, and it is hard to find results for the string variant. I think there are similar results for the substring problem, but they are not easy to find. You could try looking at papers that cite "Quadratic conditional lower bounds for string problems and dynamic time warping" by Bringmann and Künnemann, as their program lead to a lot of results related to this problem.
$endgroup$
– Discrete lizard♦
1 hour ago
$begingroup$
Longest common substring is much easier than longest common subsequence. See my answer.
$endgroup$
– D.W.♦
17 mins ago
$begingroup$
are you talking about subsequence? I am talking about substring.
$endgroup$
– Manoharsinh Rana
1 hour ago
$begingroup$
are you talking about subsequence? I am talking about substring.
$endgroup$
– Manoharsinh Rana
1 hour ago
$begingroup$
@ManoharsinhRana Ah, I see. The problems are similar, and it is hard to find results for the string variant. I think there are similar results for the substring problem, but they are not easy to find. You could try looking at papers that cite "Quadratic conditional lower bounds for string problems and dynamic time warping" by Bringmann and Künnemann, as their program lead to a lot of results related to this problem.
$endgroup$
– Discrete lizard♦
1 hour ago
$begingroup$
@ManoharsinhRana Ah, I see. The problems are similar, and it is hard to find results for the string variant. I think there are similar results for the substring problem, but they are not easy to find. You could try looking at papers that cite "Quadratic conditional lower bounds for string problems and dynamic time warping" by Bringmann and Künnemann, as their program lead to a lot of results related to this problem.
$endgroup$
– Discrete lizard♦
1 hour ago
$begingroup$
Longest common substring is much easier than longest common subsequence. See my answer.
$endgroup$
– D.W.♦
17 mins ago
$begingroup$
Longest common substring is much easier than longest common subsequence. See my answer.
$endgroup$
– D.W.♦
17 mins ago
add a comment |
$begingroup$
Yes. There's even a Wikipedia article about it! https://en.wikipedia.org/wiki/Longest_common_substring_problem
In particular, as Wikipedia explains, there is a linear-time algorithm, using suffix trees (or suffix arrays).
Searching on "longest common substring" turns up that Wikipedia article as the first hit (for me). In the future, please research the problem before asking here. (See, e.g., https://meta.stackoverflow.com/q/261592/781723.)
$endgroup$
add a comment |
$begingroup$
Yes. There's even a Wikipedia article about it! https://en.wikipedia.org/wiki/Longest_common_substring_problem
In particular, as Wikipedia explains, there is a linear-time algorithm, using suffix trees (or suffix arrays).
Searching on "longest common substring" turns up that Wikipedia article as the first hit (for me). In the future, please research the problem before asking here. (See, e.g., https://meta.stackoverflow.com/q/261592/781723.)
$endgroup$
add a comment |
$begingroup$
Yes. There's even a Wikipedia article about it! https://en.wikipedia.org/wiki/Longest_common_substring_problem
In particular, as Wikipedia explains, there is a linear-time algorithm, using suffix trees (or suffix arrays).
Searching on "longest common substring" turns up that Wikipedia article as the first hit (for me). In the future, please research the problem before asking here. (See, e.g., https://meta.stackoverflow.com/q/261592/781723.)
$endgroup$
Yes. There's even a Wikipedia article about it! https://en.wikipedia.org/wiki/Longest_common_substring_problem
In particular, as Wikipedia explains, there is a linear-time algorithm, using suffix trees (or suffix arrays).
Searching on "longest common substring" turns up that Wikipedia article as the first hit (for me). In the future, please research the problem before asking here. (See, e.g., https://meta.stackoverflow.com/q/261592/781723.)
answered 37 mins ago
D.W.♦D.W.
102k12127291
102k12127291
add a comment |
add a comment |
Thanks for contributing an answer to Computer Science 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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcs.stackexchange.com%2fquestions%2f105969%2flongest-common-substring-in-linear-time%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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