Best way to find a substring in a string
In Ruby, use the String#include?
method:
str = "hello how are you?"
substr = "how are"
str.include? substr
which returns true
.
Find all possible substring in fastest way
You can't create O(N^2)
strings in better than O(N^2)
time. It is a mathematical impossibility. Even if creating a string took one instruction, that is still a O(N^2)
computation.
Putting complexity aside, I don't think your code can be improved upon in any significant way.
Can we make it faster?
Probably not.
Optimizing this particular piece of code is a futile activity. Since you are writing the strings to standard output, the actual performance will be dominated by the overheads of writing the characters ... and whatever the OS does with the output.
Python: Find a substring in a string and returning the index of the substring
Ideally you would use str.find or str.index like demented hedgehog said. But you said you can't ...
Your problem is your code searches only for the first character of your search string which(the first one) is at index 2.
You are basically saying if char[0]
is in s
, increment index
until ch == char[0]
which returned 3 when I tested it but it was still wrong. Here's a way to do it.
def find_str(s, char):
index = 0
if char in s:
c = char[0]
for ch in s:
if ch == c:
if s[index:index+len(char)] == char:
return index
index += 1
return -1
print(find_str("Happy birthday", "py"))
print(find_str("Happy birthday", "rth"))
print(find_str("Happy birthday", "rh"))
It produced the following output:
3
8
-1
How to check whether a string contains a substring in JavaScript?
ECMAScript 6 introduced String.prototype.includes
:
const string = "foo";
const substring = "oo";
console.log(string.includes(substring)); // true
what is the best way to find substring in a string with its frequency using c#?
It sounds like you want to find only whole words within the string. This can be accomplished with a regular expression using \b
, which means 'word boundary'. For example:
var input = "abcdef ghijk";
var freq1 = Regex.Matches(input, @"\bghijk\b").Count;
Console.WriteLine(freq1); // 1
var freq2 = Regex.Matches(input, @"\bcde\b").Count;
Console.WriteLine(freq2); // 0
This will also take into account punctuation like commas and periods.
How to check whether a string contains a substring in Ruby
You can use the include?
method:
my_string = "abcdefg"
if my_string.include? "cde"
puts "String includes 'cde'"
end
How to find all occurrences of a substring?
There is no simple built-in string function that does what you're looking for, but you could use the more powerful regular expressions:
import re
[m.start() for m in re.finditer('test', 'test test test test')]
#[0, 5, 10, 15]
If you want to find overlapping matches, lookahead will do that:
[m.start() for m in re.finditer('(?=tt)', 'ttt')]
#[0, 1]
If you want a reverse find-all without overlaps, you can combine positive and negative lookahead into an expression like this:
search = 'tt'
[m.start() for m in re.finditer('(?=%s)(?!.{1,%d}%s)' % (search, len(search)-1, search), 'ttt')]
#[1]
re.finditer
returns a generator, so you could change the []
in the above to ()
to get a generator instead of a list which will be more efficient if you're only iterating through the results once.
Related Topics
Best Way to Compare Dates in Android
Why Does the Jvm Consume Less Memory Than -Xms Specified
How to Convert a JSON String to a Map<String, String> with Jackson JSON
Cannot Issue Data Manipulation Statements with Executequery()
How to Do a Junit Assert on a Message in a Logger
How to Iterate Through the Unicode Codepoints of a Java String
Jlabel Mouse Events for Drag and Drop
How to Create a Zip File in Java
How to Add and Remove Elements of Enumeration at Runtime in Java
Setting Custom Actionbar Title from Fragment
Java.Lang.Classnotfoundexception in Spite of Using Classpath Environment Variable
Deep Copy, Shallow Copy, Clone
What Is the Maximum Depth of the Java Call Stack
Java 8: Lambda-Streams, Filter by Method with Exception