字符串中以给定字符串开头和结尾的不同子字符串

给定一个字符串s和另外两个字符串begin和end,找出字符串中以给定begin和end字符串开头和结尾的不同子字符串的数量。

null

例如:

Input : s = "geeksforgeeks"        begin = "geeks"        end = "for"Output : 1Input : s = "vishakha"        begin = "h"        end = "a"Output : 2Two different sub-strings are "ha" and "hakha".

方法: 查找字符串开始和结束的所有匹配项。将每个字符串的索引存储在两个不同的数组中。然后遍历整个字符串,每次迭代向已经看到的子字符串添加一个符号,并将新字符串映射到一些非负整数。由于字符串和等长的不同字符串的结束和开始映射到不同的数字(等长的字符串映射到相同的数字),只需计算一定长度的必要子字符串的数量。

C++

// Cpp program to find number of
// different sub strings
#include <bits/stdc++.h>
using namespace std;
// function to return number of different
// sub-strings
int numberOfDifferentSubstrings(string s, string a,
string b)
{
// initially our answer is zero.
int ans = 0;
// find the length of given strings
int ls = s.size(), la = a.size(), lb = b.size();
// currently make array and initially put zero.
int x[ls] = { 0 }, y[ls] = { 0 };
// find occurrence of "a" and "b" in string "s"
for ( int i = 0; i < ls; i++) {
if (s.substr(i, la) == a)
x[i] = 1;
if (s.substr(i, lb) == b)
y[i] = 1;
}
// We use a hash to make sure that same
// substring is not counted twice.
unordered_set<string> hash;
// go through all the positions to find
// occurrence of "a" first.
string curr_substr = "" ;
for ( int i = 0; i < ls; i++) {
// if we found occurrence of "a".
if (x[i]) {
// then go through all the positions
// to find occurrence of "b".
for ( int j = i; j < ls; j++) {
// if we do found "b" at index
// j then add it to already
// existed substring.
if (!y[j])
curr_substr += s[j];
// if we found occurrence of "b".
if (y[j]) {
// now add string "b" to
// already existed substring.
curr_substr += s.substr(j, lb);
// If current substring is not
// included already.
if (hash.find(curr_substr) == hash.end())
ans++;
// put any non negative
// integer to make this
// string as already
// existed.
hash.insert(curr_substr);
}
}
// make substring null.
curr_substr = "" ;
}
}
// return answer.
return ans;
}
// Driver program for above function.
int main()
{
string s = "codecppforfood" ;
string begin = "c" ;
string end = "d" ;
cout << numberOfDifferentSubstrings(s, begin, end)
<< endl;
return 0;
}


JAVA

// Java program to find number of
// different sub strings
import java.util.HashSet;
class GFG
{
// function to return number of
// different sub-strings
static int numberOfDifferentSubstrings(String s,
char a, char b)
{
// initially our answer is zero.
int ans = 0 ;
// find the length of given strings
int ls = s.length();
// currently make array and
// initially put zero.
int [] x = new int [ls];
int [] y = new int [ls];
// find occurrence of "a" and "b"
// in string "s"
for ( int i = 0 ; i < ls; i++)
{
if (s.charAt(i) == a)
x[i] = 1 ;
if (s.charAt(i) == b)
y[i] = 1 ;
}
// We use a hash to make sure that same
// substring is not counted twice.
HashSet<String> hash = new HashSet<>();
// go through all the positions to find
// occurrence of "a" first.
String curr_substr = "" ;
for ( int i = 0 ; i < ls; i++)
{
// if we found occurrence of "a".
if (x[i] != 0 )
{
// then go through all the positions
// to find occurrence of "b".
for ( int j = i; j < ls; j++)
{
// if we do found "b" at index
// j then add it to already
// existed substring.
if (y[j] == 0 )
curr_substr += s.charAt(i);
// if we found occurrence of "b".
if (y[j] != 0 )
{
// now add string "b" to
// already existed substring.
curr_substr += s.charAt(j);
// If current substring is not
// included already.
if (!hash.contains(curr_substr))
ans++;
// put any non negative
// integer to make this
// string as already
// existed.
hash.add(curr_substr);
}
}
// make substring null.
curr_substr = "" ;
}
}
// return answer.
return ans;
}
// Driver Code
public static void main(String[] args)
{
String s = "codecppforfood" ;
char begin = 'c' ;
char end = 'd' ;
System.out.println(
numberOfDifferentSubstrings(s, begin, end));
}
}
// This code is contributed by
// sanjeev2552


Python3

# Python 3 program to find number of
# different sub strings
# function to return number of different
# sub-strings
def numberOfDifferentSubstrings(s, a, b):
# initially our answer is zero.
ans = 0
# find the length of given strings
ls = len (s)
la = len (a)
lb = len (b)
# currently make array and initially
# put zero.
x = [ 0 ] * ls
y = [ 0 ] * ls
# find occurrence of "a" and "b" in string "s"
for i in range (ls):
if (s[i: la + i] = = a):
x[i] = 1
if (s[i: lb + i] = = b):
y[i] = 1
# We use a hash to make sure that same
# substring is not counted twice.
hash = []
# go through all the positions to find
# occurrence of "a" first.
curr_substr = ""
for i in range (ls):
# if we found occurrence of "a".
if (x[i]):
# then go through all the positions
# to find occurrence of "b".
for j in range ( i, ls):
# if we do found "b" at index
# j then add it to already
# existed substring.
if ( not y[j]):
curr_substr + = s[j]
# if we found occurrence of "b".
if (y[j]):
# now add string "b" to
# already existed substring.
curr_substr + = s[j: lb + j]
# If current substring is not
# included already.
if curr_substr not in hash :
ans + = 1
# put any non negative integer
# to make this string as already
# existed.
hash .append(curr_substr)
# make substring null.
curr_substr = ""
# return answer.
return ans
# Driver Code
if __name__ = = "__main__" :
s = "codecppforfood"
begin = "c"
end = "d"
print (numberOfDifferentSubstrings(s, begin, end))
# This code is contributed by ita_c


C#

// C# program to find number of
// different sub strings
using System;
using System.Collections.Generic;
class GFG
{
// function to return number of
// different sub-strings
static int numberOfDifferentSubstrings(String s,
char a, char b)
{
// initially our answer is zero.
int ans = 0;
// find the length of given strings
int ls = s.Length;
// currently make array and
// initially put zero.
int [] x = new int [ls];
int [] y = new int [ls];
// find occurrence of "a" and "b"
// in string "s"
for ( int i = 0; i < ls; i++)
{
if (s[i] == a)
x[i] = 1;
if (s[i] == b)
y[i] = 1;
}
// We use a hash to make sure that same
// substring is not counted twice.
HashSet<String> hash = new HashSet<String>();
// go through all the positions to find
// occurrence of "a" first.
String curr_substr = "" ;
for ( int i = 0; i < ls; i++)
{
// if we found occurrence of "a".
if (x[i] != 0)
{
// then go through all the positions
// to find occurrence of "b".
for ( int j = i; j < ls; j++)
{
// if we do found "b" at index
// j then add it to already
// existed substring.
if (y[j] == 0)
curr_substr += s[i];
// if we found occurrence of "b".
if (y[j] != 0)
{
// now add string "b" to
// already existed substring.
curr_substr += s[j];
// If current substring is not
// included already.
if (!hash.Contains(curr_substr))
ans++;
// put any non negative
// integer to make this
// string as already
// existed.
hash.Add(curr_substr);
}
}
// make substring null.
curr_substr = "" ;
}
}
// return answer.
return ans;
}
// Driver Code
public static void Main(String[] args)
{
String s = "codecppforfood" ;
char begin = 'c' ;
char end = 'd' ;
Console.WriteLine(
numberOfDifferentSubstrings(s, begin, end));
}
}
// This code is contributed by Rajput-Ji


Javascript

<script>
// Javascript program to find number of
// different sub strings
// function to return number of
// different sub-strings
function numberOfDifferentSubstrings(s,a,b)
{
// initially our answer is zero.
let ans = 0;
// find the length of given strings
let ls = s.length;
// currently make array and
// initially put zero.
let x = new Array(ls);
let y = new Array(ls);
for (let i=0;i<ls;i++)
{
x[i]=0;
y[i]=0;
}
// find occurrence of "a" and "b"
// in string "s"
for (let i = 0; i < ls; i++)
{
if (s[i] == a)
x[i] = 1;
if (s[i] == b)
y[i] = 1;
}
// We use a hash to make sure that same
// substring is not counted twice.
let hash = new Set();
// go through all the positions to find
// occurrence of "a" first.
let curr_substr = "" ;
for (let i = 0; i < ls; i++)
{
// if we found occurrence of "a".
if (x[i] != 0)
{
// then go through all the positions
// to find occurrence of "b".
for (let j = i; j < ls; j++)
{
// if we do found "b" at index
// j then add it to already
// existed substring.
if (y[j] == 0)
curr_substr += s[i];
// if we found occurrence of "b".
if (y[j] != 0)
{
// now add string "b" to
// already existed substring.
curr_substr += s[j];
// If current substring is not
// included already.
if (!hash.has(curr_substr))
ans++;
// put any non negative
// integer to make this
// string as already
// existed.
hash.add(curr_substr);
}
}
// make substring null.
curr_substr = "" ;
}
}
// return answer.
return ans;
}
// Driver Code
let s = "codecppforfood" ;
let begin = 'c' ;
let end = 'd' ;
document.write(numberOfDifferentSubstrings(s, begin, end));
// This code is contributed by rag2127
</script>


输出:

3
© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享