字符串中不同子字符串的计数
原文:https://www.geeksforgeeks.org/count-number-of-distinct-substring-in-a-string/
给定一个字符串,计算给定字符串的所有不同子字符串。
示例:
Input : abcd
Output : abcd abc ab a bcd bc b cd c d
All Elements are Distinct
Input : aaa
Output : aaa aa a aa a a
All elements are not Distinct
先决条件:打印给定数组的子数组。
这个想法是使用哈希表(Java 中为HashSet
)来存储所有生成的子字符串。 最后,我们返回HashSet
的大小。
C++
// C++ program to count all distinct substrings in a string
#include<bits/stdc++.h>
using namespace std;
int distinctSubstring(string str)
{
// Put all distinct substring in a HashSet
set<string> result ;
// List All Substrings
for (int i = 0; i <= str.length(); i++)
{
for (int j = 1; j <= str.length()-i; j++)
{
// Add each substring in Set
result.insert(str.substr(i, j));
}
}
// Return size of the HashSet
return result.size();
}
// Driver Code
int main()
{
string str = "aaaa";
cout << (distinctSubstring(str));
}
// This code is contributed by Rajput-Ji
Java
// Java program to count all distinct substrings in a string
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class DistinctSubstring {
public static int distinctSubstring(String str)
{
// Put all distinct substring in a HashSet
Set<String> result = new HashSet<String>();
// List All Substrings
for (int i = 0; i <= str.length(); i++) {
for (int j = i + 1; j <= str.length(); j++) {
// Add each substring in Set
result.add(str.substring(i, j));
}
}
// Return size of the HashSet
return result.size();
}
// Driver Code
public static void main(String[] args)
{
String str = "aaaa";
System.out.println(distinctSubstring(str));
}
}
Python3
# Python3 program to count all distinct substrings in a string
def distinctSubstring(str):
# Put all distinct substring in a HashSet
result = set()
# List All Substrings
for i in range(len(str)+1):
for j in range( i + 1, len(str)+1):
# Add each substring in Set
result.add(str[i:j]);
# Return size of the HashSet
return len(result);
# Driver Code
if __name__ == '__main__':
str = "aaaa";
print(distinctSubstring(str));
# This code has been contributed by 29AjayKumar
C
// C# program to count all distinct
// substrings in a string
using System;
using System.Collections.Generic;
class DistinctSubstring
{
public static int distinctSubstring(String str)
{
// Put all distinct substring in a HashSet
HashSet<String> result = new HashSet<String>();
// List All Substrings
for (int i = 0; i <= str.Length; i++)
{
for (int j = i + 1; j <= str.Length; j++)
{
// Add each substring in Set
result.Add(str.Substring(i, j - i));
}
}
// Return size of the HashSet
return result.Count;
}
// Driver Code
public static void Main(String[] args)
{
String str = "aaaa";
Console.WriteLine(distinctSubstring(str));
}
}
// This code is contributed by 29AjayKumar
输出:
4
如何打印不同的子字符串?
C++
// C++ program to count all distinct
// substrings in a string
#include <bits/stdc++.h>
using namespace std;
set<string> distinctSubstring(string str)
{
// Put all distinct substrings
// in the Hashset
set<string> result;
// List all substrings
for(int i = 0; i <= str.length(); i++)
{
for(int j = i + 1; j <= str.length(); j++)
{
// Add each substring in Set
result.insert(str.substr(i, j));
}
}
// Return the hashset
return result;
}
// Driver code
int main()
{
string str = "aaaa";
set<string> subs = distinctSubstring(str);
cout << "Distinct Substrings are: \n";
for(auto i : subs)
cout << i << endl;
}
// This code is contributed by Ronak Mangal
Java
// Java program to count all distinct substrings in a string
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class DistinctSubstring {
public static Set<String> distinctSubstring(String str)
{
// Put all distinct substring in a HashSet
Set<String> result = new HashSet<String>();
// List All Substrings
for (int i = 0; i <= str.length(); i++) {
for (int j = i + 1; j <= str.length(); j++) {
// Add each substring in Set
result.add(str.substring(i, j));
}
}
// Return the HashSet
return result;
}
// Driver Code
public static void main(String[] args)
{
String str = "aaaa";
Set<String> subs = distinctSubstring(str);
System.out.println("Distinct Substrings are: ");
for (String s : subs) {
System.out.println(s);
}
}
}
Python3
# Python3 program to count all distinct
# substrings in a string
def distinctSubstring(str):
# Put all distinct substring in a HashSet
result = set();
# List All Substrings
for i in range(len(str)):
for j in range(i + 1, len(str) + 1):
# Add each substring in Set
result.add(str[i:j]);
# Return the HashSet
return result;
# Driver Code
if __name__ == '__main__':
str = "aaaa";
subs = distinctSubstring(str);
print("Distinct Substrings are: ");
for s in subs:
print(s);
# This code is contributed by 29AjayKumar
C
// C# program to count all distinct
// substrings in a string
using System;
using System.Collections.Generic;
class GFG
{
public static HashSet<String> distinctSubstring(String str)
{
// Put all distinct substring in a HashSet
HashSet<String> result = new HashSet<String>();
// List All Substrings
for (int i = 0; i <= str.Length; i++)
{
for (int j = i + 1; j <= str.Length; j++)
{
// Add each substring in Set
result.Add(str.Substring(i, j - i));
}
}
// Return the HashSet
return result;
}
// Driver Code
public static void Main(String[] args)
{
String str = "aaaa";
HashSet<String> subs = distinctSubstring(str);
Console.WriteLine("Distinct Substrings are: ");
foreach (String s in subs)
{
Console.WriteLine(s);
}
}
}
// This code is contributed by 29AjayKumar
输出:
Distinct Substrings are:
aa
aaa
a
aaaa
优化:
我们可以进一步优化上面的代码。 substr()
函数以线性时间工作。 我们可以使用将当前字符追加到前一个子字符串来获取当前子字符串。
C++
// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
// Function to return the count of
// valid sub-strings
void printSubstrings(string s)
{
// To store distinct output substrings
unordered_set<string> us;
// Traverse through the given string and
// one by one generate substrings beginning
// from s[i].
for (int i = 0; i < s.size(); ++i) {
// One by one generate substrings ending
// with s[j]
string ss = "";
for (int j = i; j < s.size(); ++j) {
ss = ss + s[j];
us.insert(ss);
}
}
// Print all substrings one by one
for (auto s : us)
cout << s << " ";
}
// Driver code
int main()
{
string str = "aaabc";
printSubstrings(str);
return 0;
}
Java
// Java implementation of the approach
import java.util.*;
class GFG
{
// Function to return the count of
// valid sub-Strings
static void printSubStrings(String s)
{
// To store distinct output subStrings
HashSet<String> us = new HashSet<String>();
// Traverse through the given String and
// one by one generate subStrings beginning
// from s[i].
for (int i = 0; i < s.length(); ++i)
{
// One by one generate subStrings ending
// with s[j]
String ss = "";
for (int j = i; j < s.length(); ++j)
{
ss = ss + s.charAt(j);
us.add(ss);
}
}
// Print all subStrings one by one
for (String str : us)
System.out.print(str + " ");
}
// Driver code
public static void main(String[] args)
{
String str = "aaabc";
printSubStrings(str);
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 implementation of the approach
# Function to return the count of
# valid sub-Strings
def printSubStrings(s):
# To store distinct output subStrings
us = set();
# Traverse through the given String and
# one by one generate subStrings beginning
# from s[i].
for i in range(len(s)):
# One by one generate subStrings ending
# with s[j]
ss = "";
for j in range(i, len(s)):
ss = ss + s[j];
us.add(ss);
# Prall subStrings one by one
for str in us:
print(str, end=" ");
# Driver code
if __name__ == '__main__':
str = "aaabc";
printSubStrings(str);
# This code is contributed by 29AjayKumar
C
// C# implementation of the approach
using System;
using System.Collections.Generic;
class GFG
{
// Function to return the count of
// valid sub-Strings
static void printSubStrings(String s)
{
// To store distinct output subStrings
HashSet<String> us = new HashSet<String>();
// Traverse through the given String and
// one by one generate subStrings
// beginning from s[i].
for (int i = 0; i < s.Length; ++i)
{
// One by one generate subStrings
// ending with s[j]
String ss = "";
for (int j = i; j < s.Length; ++j)
{
ss = ss + s[j];
us.Add(ss);
}
}
// Print all subStrings one by one
foreach (String str in us)
Console.Write(str + " ");
}
// Driver code
public static void Main(String[] args)
{
String str = "aaabc";
printSubStrings(str);
}
}
// This code is contributed by Rajput-Ji
输出:
``` bc b abc ab aabc aa aaa c a aaab aab aaabc
```c
版权属于:月萌API www.moonapi.com,转载请注明出处