字符串的字典最大子串

给定一个字符串,我们必须找到该字符串的字典最大子字符串

null

例如:

Input : s = "ababaa"Output : babaaExplanation : "babaa" is the maximum lexicographic substring formed from this stringInput : s = "asdfaa"Output : sdfaa

这个想法很简单,我们遍历所有的子字符串。对于每个子字符串,我们将其与当前结果进行比较,并在需要时更新结果。

以下是实施情况:

C++

// CPP program to find the lexicographically
// maximum substring.
#include <bits/stdc++.h>
using namespace std;
string LexicographicalMaxString(string str)
{
// loop to find the max lexicographic
// substring in the substring array
string mx = "" ;
for ( int i = 0; i < str.length(); ++i)
mx = max(mx, str.substr(i));
return mx;
}
// Driver code
int main()
{
string str = "ababaa" ;
cout << LexicographicalMaxString(str);
return 0;
}


JAVA

// Java program to find the lexicographically
// maximum substring.
class GFG {
static String LexicographicalMaxString(String str)
{
// loop to find the max lexicographic
// substring in the substring array
String mx = "" ;
for ( int i = 0 ; i < str.length(); ++i) {
if (mx.compareTo(str.substring(i)) <= 0 ) {
mx = str.substring(i);
}
}
return mx;
}
// Driver code
public static void main(String[] args)
{
String str = "ababaa" ;
System.out.println(LexicographicalMaxString(str));
}
}
// This code is contributed by 29AjayKumar


Python3

# Python 3 program to find the
# lexicographically maximum substring.
def LexicographicalMaxString( str ):
# loop to find the max lexicographic
# substring in the substring array
mx = ""
for i in range ( len ( str )):
mx = max (mx, str [i:])
return mx
# Driver code
if __name__ = = '__main__' :
str = "ababaa"
print (LexicographicalMaxString( str ))
# This code is contributed by
# Sanjit_Prasad


C#

// C# program to find the lexicographically
// maximum substring.
using System;
public class GFG {
static String LexicographicalMaxString(String str)
{
// loop to find the max lexicographic
// substring in the substring array
String mx = "" ;
for ( int i = 0; i < str.Length; ++i) {
if (mx.CompareTo(str.Substring(i)) <= 0) {
mx = str.Substring(i);
}
}
return mx;
}
// Driver code
public static void Main()
{
String str = "ababaa" ;
Console.WriteLine(LexicographicalMaxString(str));
}
}
// This code is contributed by 29AjayKumar


Javascript

<script>
// JavaScript program to find the lexicographically
// maximum substring.
function LexicographicalMaxString(str)
{
// loop to find the max lexicographic
// substring in the substring array
var mx = "" ;
for ( var i = 0; i < str.length; ++i) {
if (mx.localeCompare(str.substring(i)) <= 0) {
mx = str.substring(i);
}
}
return mx;
}
// Driver code
var str = "ababaa" ;
document.write(LexicographicalMaxString(str));
// This code is contributed by 29AjayKumar
</script>


输出:

babaa

优化: 我们找到最大的字符及其所有索引。现在我们只需遍历最大字符的所有实例,就可以找到按字典顺序排列的最大子字符串。

这里我们遵循上述方法。

C++

// C++ program to find the lexicographically
// maximum substring.
#include <bits/stdc++.h>
using namespace std;
string LexicographicalMaxString(string str)
{
char maxchar = 'a' ;
vector< int > index;
// We store all the indexes of maximum
// characters we have in the string
for ( int i = 0; i < str.length(); i++) {
if (str[i] >= maxchar) {
maxchar = str[i];
index.push_back(i);
}
}
string maxstring = "" ;
// We form a substring from that maximum
// character index till end and check if
// its greater that maxstring
for ( int i = 0; i < index.size(); i++) {
if (str.substr(index[i], str.length()) > maxstring) {
maxstring = str.substr(index[i], str.length());
}
}
return maxstring;
}
// Driver code
int main()
{
string str = "acbacbc" ;
cout << LexicographicalMaxString(str);
return 0;
}


JAVA

// Java program to find the lexicographically
// maximum substring.
import java.io.*;
import java.util.*;
class GFG
{
static String LexicographicalMaxString(String str)
{
char maxchar = 'a' ;
ArrayList<Integer> index = new ArrayList<Integer>();
// We store all the indexes of maximum
// characters we have in the string
for ( int i = 0 ; i < str.length(); i++)
{
if (str.charAt(i) >= maxchar)
{
maxchar = str.charAt(i);
index.add(i);
}
}
String maxstring = "" ;
// We form a substring from that maximum
// character index till end and check if
// its greater that maxstring
for ( int i = 0 ; i < index.size(); i++)
{
if (str.substring(index.get(i),
str.length()).compareTo( maxstring) > 0 )
{
maxstring = str.substring(index.get(i),
str.length());
}
}
return maxstring;
}
// Driver code
public static void main (String[] args)
{
String str = "acbacbc" ;
System.out.println(LexicographicalMaxString(str));
}
}
// This code is contributed by rag2127.


Python3

# Python 3 program to find
# the lexicographically
# maximum substring.
def LexicographicalMaxString(st):
maxchar = 'a'
index = []
# We store all the indexes
# of maximum characters we
# have in the string
for i in range ( len (st)):
if (st[i] > = maxchar):
maxchar = st[i]
index.append(i)
maxstring = ""
# We form a substring from that
# maximum character index till
# end and check if its greater
# that maxstring
for i in range ( len (index)):
if (st[index[i]: len (st)] >
maxstring):
maxstring = st[index[i]:
len (st)]
return maxstring
# Driver code
if __name__ = = "__main__" :
st = "acbacbc"
print (LexicographicalMaxString(st))
# This code is contributed by Chitranayal


C#

// C# program to find the lexicographically
// maximum substring.
using System;
using System.Collections.Generic;
class GFG{
static string LexicographicalMaxString( string str)
{
char maxchar = 'a' ;
List< int > index = new List< int >();
// We store all the indexes of maximum
// characters we have in the string
for ( int i = 0; i < str.Length; i++)
{
if (str[i] >= maxchar)
{
maxchar = str[i];
index.Add(i);
}
}
string maxstring = "" ;
// We form a substring from that maximum
// character index till end and check if
// its greater that maxstring
for ( int i = 0; i < index.Count; i++)
{
if (str.Substring(index[i]).CompareTo(maxstring) > 0)
{
maxstring = str.Substring(index[i]);
}
}
return maxstring;
}
// Driver code
static public void Main()
{
string str = "acbacbc" ;
Console.Write(LexicographicalMaxString(str));
}
}
// This code is contributed by avanitrachhadiya2155


Javascript

<script>
// Javascript program to find the lexicographically
// maximum substring.
function LexicographicalMaxString(str)
{
let maxchar = 'a' ;
let index = [];
// We store all the indexes of maximum
// characters we have in the string
for (let i = 0; i < str.length; i++)
{
if (str[i] >= maxchar)
{
maxchar = str[i];
index.push(i);
}
}
let maxstring = "" ;
// We form a substring from that maximum
// character index till end and check if
// its greater that maxstring
for (let i = 0; i < index.length; i++)
{
if (str.substring(index[i],
str.length) > maxstring)
{
maxstring = str.substring(index[i],
str.length);
}
}
return maxstring;
}
// Driver code
let str = "acbacbc" ;
document.write(LexicographicalMaxString(str));
// This code is contributed by ab2127
</script>


输出:

cbc

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