本文概述
- C++
- Java
- Python3
- C#
例子:
【对字母数字字符串进行排序,以使字母和数字的位置保持不变】输入:str =" geeks12for32geeks"方法: 将字符串转换为字符数组,然后对字符数组c[]进行排序。对字符数组进行排序后,数字字符将占据数组的起始索引,字母将占据数组的其余部分。
输出:eeeef12ggk23korss
输入:str =" d4c3b2a1"
输出:a1b2c3d4
数字部分将被排序,字母部分也将被排序。我们将保持两个指标在al_c字母表的起始索引部分和一个nu_c开始指数的数字部分,现在我们将检查原始字符串,如果被一个字母然后占领我们将取代它与c [al_c]和增量al_c其他我们将取代它与c [nu_c]和增量nu_c。
下面是上述方法的实现:
C++
//C++ implementation of the approach
#include <
bits/stdc++.h>
using namespace std;
//Function that returns the string s
//in sorted form such that the
//positions of alphabets and numeric
//digits remain unchanged
string sort(string s)
{
char c[s.length() + 1];
//String to character array
strcpy (c, s.c_str());
//Sort the array
sort(c, c + s.length());
//Count of alphabets and numbers
int al_c = 0, nu_c = 0;
//Get the index from where the
//alphabets start
while (c[al_c] <
97)
al_c++;
//Now replace the string with sorted string
for ( int i = 0;
i <
s.length();
i++) {//If the position was occupied by an
//alphabet then replace it with alphabet
if (s[i] <
97)
s[i] = c[nu_c++];
//Else replace it with a number
else
s[i] = c[al_c++];
}//Return the sorted string
return s;
}//Driver code
int main()
{
string s = "d4c3b2a1" ;
cout <
<
sort(s);
return 0;
}
Java
//A Java implementation of the approach
import java.util.*;
class GFG
{//Function that returns the string s
//in sorted form such that the
//positions of alphabets and numeric
//digits remain unchanged
static String sort(String s)
{
char []c = new char [s.length() + 1 ];
//String to character array
c = s.toCharArray();
//Sort the array
Arrays.sort(c);
//Count of alphabets and numbers
int al_c = 0 , nu_c = 0 ;
//Get the index from where the
//alphabets start
while (c[al_c] <
97 )
al_c++;
//Now replace the string with sorted string
for ( int i = 0 ;
i <
s.length();
i++)
{//If the position was occupied by an
//alphabet then replace it with alphabet
if (s.charAt(i) <
97 )
s = s.substring( 0 , i)+ c[nu_c++]+s.substring(i+ 1 );
//Else replace it with a number
else
s = s.substring( 0 , i)+ c[al_c++]+s.substring(i+ 1 );
}//Return the sorted string
return s;
}//Driver code
public static void main(String[] args)
{
String s = "d4c3b2a1" ;
System.out.println(sort(s));
}
}/* This code contributed by PrinciRaj1992 */
Python3
# Python3 implementation of the approach# Function that returns the string s
# in sorted form such that the
# positions of alphabets and numeric
# digits remain unchanged
def sort(s):# String to character array
c, s = list (s), list (s)# Sort the array
c.sort()# Count of alphabets and numbers
al_c = 0
nu_c = 0# Get the index from where the
# alphabets start
while ord (c[al_c]) <
97 :
al_c + = 1# Now replace the string with sorted string
for i in range ( len (s)):# If the position was occupied by an
# alphabet then replace it with alphabet
if s[i] <
'a' :
s[i] = c[nu_c]
nu_c + = 1# Else replace it with a number
else :
s[i] = c[al_c]
al_c + = 1# Return the sorted string
return ''.join(s)# Driver Code
if __name__ = = "__main__" :
s = "d4c3b2a1"
print (sort(s))# This code is contributed by
# sanjeev2552
C#
//C# implementation of the approach
using System;
class GFG
{ //Function that returns the string s
//in sorted form such that the
//positions of alphabets and numeric
//digits remain unchanged
static string sort( string s)
{
char []c = new char [s.Length + 1];
//String to character array
c = s.ToCharArray();
//Sort the array
Array.Sort(c);
//Count of alphabets and numbers
int al_c = 0, nu_c = 0;
//Get the index from where the
//alphabets start
while (c[al_c] <
97)
al_c++;
//Now replace the string with sorted string
for ( int i = 0;
i <
s.Length;
i++)
{ //If the position was occupied by an
//alphabet then replace it with alphabet
if (s[i] <
97)
s = s.Substring(0, i)+ c[nu_c++]+s.Substring(i+1);
//Else replace it with a number
else
s = s.Substring(0, i)+ c[al_c++]+s.Substring(i+1);
} //Return the sorted string
return s;
} //Driver code
public static void Main()
{
string s = "d4c3b2a1" ;
Console.WriteLine(sort(s));
}
} /* This code contributed by AnkitRai01 */
输出如下:
a1b2c3d4
时间复杂度:O(N * log(N))其中N是字符串的长度。
推荐阅读
- 德里面试经验– 1年经验
- 缓存中的透写和回写是什么(详细介绍)
- Win8系统没有组策略的原因区分与处理办法
- Win8安装mssql2005提示打开服务失败的处理办法
- Win8.1系统找不到连接到Microsoft帐户怎样办?
- 如何应对Win8.1应用商店无法完成购买出错0x80096004的问题
- Win8系统搜索不到自家WiFi信号的应对措施
- Win8商店应用脱机且无法打开的处理办法
- Win8.1无法登录提示“你的电脑已脱机”如何处理?