按顺序打印字符串的所有不同字符(3种方法)

给定一个字符串,找到其中所有不同(或非重复)的字符。例如,如果输入字符串是“Geeks For Geeks”,那么输出应该是“For”,如果输入字符串是“Geeks quick”,那么输出应该是“GksQuiz”。 不同字符的打印顺序应与它们在输入字符串中的显示顺序相同。 例如:

null
Input  : Geeks for GeeksOutput : forInput  : Hello GeeksOutput : HoGks

方法1(简单:O(n) 2. )) 一个简单的解决方案是运行两个循环。从左侧开始穿越。检查每个字符是否重复。如果字符不重复,则增加非重复字符的计数。当计数变为1时,返回每个字符。

C++

#include <bits/stdc++.h>
using namespace std;
int main()
{
string str = "GeeksforGeeks" ;
for ( int i = 0; i < str.size(); i++)
{
int flag = 0;
for ( int j = 0; j < str.size(); j++)
{
// checking if two characters are equal
if (str[i] == str[j] and i != j)
{
flag = 1;
break ;
}
}
if (flag == 0)
cout << str[i];
}
return 0;
}
// This code is contributed by umadevi9616


JAVA

import java.util.*;
class GFG{
public static void main(String[] args)
{
String str = "GeeksforGeeks" ;
for ( int i = 0 ; i < str.length(); i++)
{
int flag = 0 ;
for ( int j = 0 ; j < str.length(); j++)
{
// checking if two characters are equal
if (str.charAt(i) == str.charAt(j) && i != j)
{
flag = 1 ;
break ;
}
}
if (flag == 0 )
System.out.print(str.charAt(i));
}
}
}
// This code is contributed by gauravrajput1


Python3

string = "GeeksforGeeks"
for i in range ( 0 , len (string)):
flag = 0
for j in range ( 0 , len (string)):
#checking if two characters are equal
if (string[i] = = string[j] and i! = j):
flag = 1
break
if (flag = = 0 ):
print (string[i],end = "")


C#

using System;
public class GFG{
public static void Main(String[] args)
{
String str = "GeeksforGeeks" ;
for ( int i = 0; i < str.Length; i++)
{
int flag = 0;
for ( int j = 0; j < str.Length; j++)
{
// checking if two characters are equal
if (str[i] == str[j] && i != j)
{
flag = 1;
break ;
}
}
if (flag == 0)
Console.Write(str[i]);
}
}
}
// This code is contributed by gauravrajput1


Javascript

<script>
var str = "GeeksforGeeks" ;
for ( var i = 0; i < str.length; i++) {
var flag = 0;
for (j = 0; j < str.length; j++) {
// checking if two characters are equal
if (str.charAt(i) == str.charAt(j) && i != j) {
flag = 1;
break ;
}
}
if (flag == 0)
document.write(str.charAt(i));
}
// This code is contributed by gauravrajput1
</script>


输出

for

方法2(有效但需要两次遍历:O(n))

  1. 创建数组count[]以存储字符数。
  2. 遍历输入字符串str,并对每个字符x=str[i]执行以下操作。 增量计数[x]。
  3. 再次遍历输入字符串,并对每个字符str[i]执行以下操作
    1. 如果计数[x]为1,则打印唯一字符
    2. 如果计数[x]大于1,则忽略重复的字符。

下面是上述想法的实现。

C++

// C++ program to print distinct characters of a
// string.
# include <iostream>
using namespace std;
# define NO_OF_CHARS 256
/* Print duplicates present in the passed string */
void printDistinct( char *str)
{
// Create an array of size 256 and count of
// every character in it
int count[NO_OF_CHARS];
/* Count array with frequency of characters */
int i;
for (i = 0; *(str+i); i++)
if (*(str+i)!= ' ' )
count[*(str+i)]++;
int n = i;
// Print characters having count more than 0
for (i = 0; i < n; i++)
if (count[*(str+i)] == 1)
cout<< str[i];
}
/* Driver program*/
int main()
{
char str[] = "GeeksforGeeks" ;
printDistinct(str);
return 0;
}


JAVA

// Java program to print distinct characters of a
// string.
public class GFG {
static final int NO_OF_CHARS = 256 ;
/* Print duplicates present in the passed string */
static void printDistinct(String str)
{
// Create an array of size 256 and count of
// every character in it
int [] count = new int [NO_OF_CHARS];
/* Count array with frequency of characters */
int i;
for (i = 0 ; i < str.length(); i++)
if (str.charAt(i)!= ' ' )
count[( int )str.charAt(i)]++;
int n = i;
// Print characters having count more than 0
for (i = 0 ; i < n; i++)
if (count[( int )str.charAt(i)] == 1 )
System.out.print(str.charAt(i));
}
/* Driver program*/
public static void main(String args[])
{
String str = "GeeksforGeeks" ;
printDistinct(str);
}
}
// This code is contributed by Sumit Ghosh


Python3

# Python3 program to print distinct
# characters of a string.
NO_OF_CHARS = 256
# Print duplicates present in the
# passed string
def printDistinct( str ):
# Create an array of size 256 and
# count of every character in it
count = [ 0 ] * NO_OF_CHARS
# Count array with frequency of
# characters
for i in range ( len ( str )):
if ( str [i] ! = ' ' ):
count[ ord ( str [i])] + = 1
n = i
# Print characters having count
# more than 0
for i in range (n):
if (count[ ord ( str [i])] = = 1 ):
print ( str [i], end = "")
# Driver Code
if __name__ = = "__main__" :
str = "GeeksforGeeks"
printDistinct( str )
# This code is contributed by ita_c


C#

// C# program to print distinct characters
// of a string.
using System;
public class GFG {
static int NO_OF_CHARS = 256;
/* Print duplicates present in the
passed string */
static void printDistinct(String str)
{
// Create an array of size 256 and
// count of every character in it
int [] count = new int [NO_OF_CHARS];
/* Count array with frequency of
characters */
int i;
for (i = 0; i < str.Length; i++)
if (str[i]!= ' ' )
count[( int )str[i]]++;
int n = i;
// Print characters having count
// more than 0
for (i = 0; i < n; i++)
if (count[( int )str[i]] == 1)
Console.Write(str[i]);
}
/* Driver program*/
public static void Main()
{
String str = "GeeksforGeeks" ;
printDistinct(str);
}
}
// This code is contributed by parashar.


Javascript

<script>
// Javascript program to print distinct characters of a
// string.
let NO_OF_CHARS = 256;
/* Print duplicates present in the passed string */
function printDistinct(str)
{
// Create an array of size 256 and count of
// every character in it
let count = new Array(NO_OF_CHARS);
for (let i=0;i<NO_OF_CHARS;i++)
{
count[i]=0;
}
/* Count array with frequency of characters */
let i;
for (i = 0; i < str.length; i++)
if (str[i]!= ' ' )
count[str[i].charCodeAt(0)]++;
let n = i;
// Print characters having count more than 0
for (i = 0; i < n; i++)
if (count[str[i].charCodeAt(0)] == 1)
document.write(str[i]);
}
/* Driver program*/
let str = "GeeksforGeeks" ;
printDistinct(str);
// This code is contributed by rag2127
</script>


输出:

for

方法3(O(n),需要一次遍历) 其想法是使用两个大小为256的辅助数组(假设字符存储使用8位)。

  1. 将计数[]中的所有值初始化为0,将索引[]中的所有值初始化为n,其中n是字符串的长度。
  2. 遍历输入字符串str,并对每个字符c=str[i]执行以下操作。
    • 增量计数[x]。
    • 如果计数[x]为1,则将x的索引存储在索引[x]中,即索引[x]=i
    • 如果计数[x]为2,则从索引[]中删除x,即索引[x]=n
  3. 现在索引[]具有所有不同字符的索引。对索引进行排序并使用它打印字符。请注意,假设字符数是固定的(通常为256),这一步需要O(1)个时间

下面是上述想法的实现。

C++

// C++ program to find all distinct characters
// in a string
#include <bits/stdc++.h>
using namespace std;
const int MAX_CHAR = 256;
// Function to print distinct characters in
// given string str[]
void printDistinct(string str)
{
int n = str.length();
// count[x] is going to store count of
// character 'x' in str. If x is not present,
// then it is going to store 0.
int count[MAX_CHAR];
// index[x] is going to store index of character
// 'x' in str. If x is not present or x is
// more than once, then it is going to store a value
// (for example, length of string) that cannot be
// a valid index in str[]
int index[MAX_CHAR];
// Initialize counts of all characters and indexes
// of distinct characters.
for ( int i = 0; i < MAX_CHAR; i++)
{
count[i] = 0;
index[i] = n; // A value more than any index
// in str[]
}
// Traverse the input string
for ( int i = 0; i < n; i++)
{
// Find current character and increment its
// count
char x = str[i];
++count[x];
// If this is first occurrence, then set value
// in index as index of it.
if (count[x] == 1 && x != ' ' )
index[x] = i;
// If character repeats, then remove it from
// index[]
if (count[x] == 2)
index[x] = n;
}
// Since size of index is constant, below operations
// take constant time.
sort(index, index+MAX_CHAR);
for ( int i=0; i<MAX_CHAR && index[i] != n; i++)
cout << str[index[i]];
}
// Driver code
int main()
{
string str = "GeeksforGeeks" ;
printDistinct(str);
return 0;
}


JAVA

// Java program to print distinct characters of
// a string.
import java.util.Arrays;
public class GFG {
static final int MAX_CHAR = 256 ;
// Function to print distinct characters in
// given string str[]
static void printDistinct(String str)
{
int n = str.length();
// count[x] is going to store count of
// character 'x' in str. If x is not present,
// then it is going to store 0.
int [] count = new int [MAX_CHAR];
// index[x] is going to store index of character
// 'x' in str. If x is not present or x is
// more than once, then it is going to store a
// value (for example, length of string) that
// cannot be a valid index in str[]
int [] index = new int [MAX_CHAR];
// Initialize counts of all characters and
// indexes of distinct characters.
for ( int i = 0 ; i < MAX_CHAR; i++)
{
count[i] = 0 ;
index[i] = n; // A value more than any
// index in str[]
}
// Traverse the input string
for ( int i = 0 ; i < n; i++)
{
// Find current character and increment
// its count
char x = str.charAt(i);
++count[x];
// If this is first occurrence, then set
// value in index as index of it.
if (count[x] == 1 && x != ' ' )
index[x] = i;
// If character repeats, then remove it
// from index[]
if (count[x] == 2 )
index[x] = n;
}
// Since size of index is constant, below
// operations take constant time.
Arrays.sort(index);
for ( int i = 0 ; i < MAX_CHAR && index[i] != n;
i++)
System.out.print(str.charAt(index[i]));
}
// Driver code
public static void main(String args[])
{
String str = "GeeksforGeeks" ;
printDistinct(str);
}
}
// This code is contributed by Sumit Ghosh


python

# Python3 program to find all distinct characters
# in a String
MAX_CHAR = 256
# Function to print distinct characters in
# given Str[]
def printDistinct( Str ):
n = len ( Str )
# count[x] is going to store count of
# character 'x' in Str. If x is not present,
# then it is going to store 0.
count = [ 0 for i in range (MAX_CHAR)]
# index[x] is going to store index of character
# 'x' in Str. If x is not present or x is
# more than once, then it is going to store a value
# (for example, length of String) that cannot be
# a valid index in Str[]
index = [n for i in range (MAX_CHAR)]
# Traverse the input String
for i in range (n):
# Find current character and increment its
# count
x = ord ( Str [i])
count[x] + = 1
# If this is first occurrence, then set value
# in index as index of it.
if (count[x] = = 1 and x ! = ' ' ):
index[x] = i
# If character repeats, then remove it from
# index[]
if (count[x] = = 2 ):
index[x] = n
# Since size of index is constant, below operations
# take constant time.
index = sorted (index)
for i in range (MAX_CHAR):
if index[i] = = n:
break
print ( Str [index[i]],end = "")
# Driver code
Str = "GeeksforGeeks"
printDistinct( Str )
# This code is contributed by mohit kumar 29


C#

// C# program to print distinct characters of
// a string.
using System;
public class GFG {
static int MAX_CHAR = 256;
// Function to print distinct characters in
// given string str[]
static void printDistinct( string str)
{
int n = str.Length;
// count[x] is going to store count of
// character 'x' in str. If x is not
// present, then it is going to store 0.
int []count = new int [MAX_CHAR];
// index[x] is going to store index of
// character 'x' in str. If x is not
// present or x is more than once, then
// it is going to store a value (for
// example, length of string) that
// cannot be a valid index in str[]
int []index = new int [MAX_CHAR];
// Initialize counts of all characters
// and indexes of distinct characters.
for ( int i = 0; i < MAX_CHAR; i++)
{
count[i] = 0;
// A value more than any index
// in str[]
index[i] = n;
}
// Traverse the input string
for ( int i = 0; i < n; i++)
{
// Find current character and
// increment its count
char x = str[i];
++count[x];
// If this is first occurrence, then
// set value in index as index of it.
if (count[x] == 1 && x != ' ' )
index[x] = i;
// If character repeats, then remove
// it from index[]
if (count[x] == 2)
index[x] = n;
}
// Since size of index is constant, below
// operations take constant time.
Array.Sort(index);
for ( int i = 0; i < MAX_CHAR &&
index[i] != n; i++)
Console.Write(str[index[i]]);
}
// Driver code
public static void Main()
{
string str = "GeeksforGeeks" ;
printDistinct(str);
}
}
// This code is contributed by nitin mittal.


Javascript

<script>
// Javascript program to print distinct characters of
// a string.
let MAX_CHAR = 256;
// Function to print distinct characters in
// given string str[]
function printDistinct(str)
{
let n = str.length;
// count[x] is going to store count of
// character 'x' in str. If x is not present,
// then it is going to store 0.
let count = new Array(MAX_CHAR);
// index[x] is going to store index of character
// 'x' in str. If x is not present or x is
// more than once, then it is going to store a
// value (for example, length of string) that
// cannot be a valid index in str[]
let index = new Array(MAX_CHAR);
// Initialize counts of all characters and
// indexes of distinct characters.
for (let i = 0; i < MAX_CHAR; i++)
{
count[i] = 0;
index[i] = n; // A value more than any
// index in str[]
}
// Traverse the input string
for (let i = 0; i < n; i++)
{
// Find current character and increment
// its count
let x = str[i].charCodeAt(0);
++count[x];
// If this is first occurrence, then set
// value in index as index of it.
if (count[x] == 1 && x != ' ' )
index[x] = i;
// If character repeats, then remove it
// from index[]
if (count[x] == 2)
index[x] = n;
}
// Since size of index is constant, below
// operations take constant time.
index.sort( function (a,b){ return a-b});
for (let i = 0; i < MAX_CHAR && index[i] != n;
i++)
document.write(str[index[i]]);
}
// Driver code
let str = "GeeksforGeeks" ;
printDistinct(str);
// This code is contributed by avanitrachhadiya2155
</script>


输出

for

本文由 阿夫扎尔·安萨里 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

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