在给定的两个字符串之间按照字典顺序找到一个字符串
原文:https://www . geesforgeks . org/find-string-词典顺序-给定-两个字符串/
给定两个字符串 S 和 T,找到一个长度相同的字符串,该字符串在字典上大于 S 而小于 T。如果没有形成这样的字符串,请打印“-1”。(标准>测试)
注:字符串 S = s1s2… sn 据说在字典序上小于字符串 T = t1t2… tn,如果存在 I,那么 s1 = t1,s2 = t2,…si–1 = ti–1,si < ti。
示例:
Input : S = "aaa", T = "ccc"
Output : aab
Explanation:
Here, 'b' is greater than any
letter in S[]('a') and smaller
than any letter in T[]('c').
Input : S = "abcde", T = "abcdf"
Output : -1
Explanation:
There is no other string between
S and T.
方法:找到一个按字典顺序大于字符串 S 的字符串,并检查它是否小于字符串 T,如果是,则打印该字符串,否则打印“-1”。 要查找字符串,请以相反的顺序迭代字符串 S,如果最后一个字母不是“z”,则将该字母增加 1(移动到下一个字母)。如果是“z”,将其更改为“a”,并移动到第二个最后一个字符。 将结果字符串与字符串 T 进行比较,如果两个字符串相等,则打印“-1”,否则打印结果字符串。
下面是上述方法的实现:
C++
// CPP program to find the string
// in lexicographic order which is
// in between given two strings
#include <bits/stdc++.h>
using namespace std;
// Function to find the lexicographically
// next string
string lexNext(string s, int n)
{
// Iterate from last character
for (int i = n - 1; i >= 0; i--)
{
// If not 'z', increase by one
if (s[i] != 'z')
{
s[i]++;
return s;
}
// if 'z', change it to 'a'
s[i] = 'a';
}
}
// Driver Code
int main()
{
string S = "abcdeg", T = "abcfgh";
int n = S.length();
string res = lexNext(S, n);
// If not equal, print the
// resultant string
if (res != T)
cout << res << endl;
else
cout << "-1" << endl;
return 0;
}
Java 语言(一种计算机语言,尤用于创建网站)
//Java program to find the string
// in lexicographic order which is
// in between given two strings
class GFG {
// Function to find the lexicographically
// next string
static String lexNext(String str, int n) {
char[] s = str.toCharArray();
// Iterate from last character
for (int i = n - 1; i >= 0; i--) {
// If not 'z', increase by one
if (s[i] != 'z') {
s[i]++;
return String.valueOf(s);
}
// if 'z', change it to 'a'
s[i] = 'a';
}
return null;
}
// Driver Code
static public void main(String[] args) {
String S = "abcdeg", T = "abcfgh";
int n = S.length();
String res = lexNext(S, n);
// If not equal, print the
// resultant string
if (res != T) {
System.out.println(res);
} else {
System.out.println("-1");
}
}
}
// This code is contributed by 29AjayKumar
Python 3
# Python3 program to find the string
# in lexicographic order which is
# in between given two strings
# Function to find the lexicographically
# next string
def lexNext(s, n):
# Iterate from last character
for i in range(n - 1, -1, -1):
# If not 'z', increase by one
if s[i] != 'z':
k = ord(s[i])
s[i] = chr(k + 1)
return ''.join(s)
# if 'z', change it to 'a'
s[i] = 'a'
# Driver Code
if __name__ == "__main__":
S = "abcdeg"
T = "abcfgh"
n = len(S)
S = list(S)
res = lexNext(S, n)
# If not equal, print the
# resultant string
if res != T:
print(res)
else:
print(-1)
# This code is contributed by
# sanjeev2552
C
//C# program to find the string
// in lexicographic order which is
// in between given two strings
using System;
public class GFG {
// Function to find the lexicographically
// next string
static String lexNext(String str, int n) {
char[] s = str.ToCharArray();
// Iterate from last character
for (int i = n - 1; i >= 0; i--) {
// If not 'z', increase by one
if (s[i] != 'z') {
s[i]++;
return new String(s);
}
// if 'z', change it to 'a'
s[i] = 'a';
}
return null;
}
// Driver Code
static public void Main() {
String S = "abcdeg", T = "abcfgh";
int n = S.Length;
String res = lexNext(S, n);
// If not equal, print the
// resultant string
if (res != T) {
Console.Write(res);
} else {
Console.Write("-1");
}
}
}
// This code is contributed by 29AjayKumar
java 描述语言
<script>
// JavaScript program to find the string
// in lexicographic order which is
// in between given two strings
// Function to find the lexicographically
// next string
function lexNext( s, n){
// Iterate from last character
for (let i = n - 1; i >= 0; i--)
{
// If not 'z', increase by one
if (s[i] != 'z')
{
let code = s.charCodeAt(i)+1;
let str = String.fromCharCode(code);
return s.substr(0,i)+str+s.substr(i+1);
}
// if 'z', change it to 'a'
s[i] = 'a';
}
}
// Driver Code
let S = "abcdeg";
let T = "abcfgh";
let n = S.length;
let res = lexNext(S, n);
// If not equal, print the
// resultant string
if (res != T)
document.write( res,'<br>');
else
document.write("-1 <br>" );
</script>
输出:
abcdeh
版权属于:月萌API www.moonapi.com,转载请注明出处