给定一个字符串,找到其中所有不同(或非重复)的字符。例如,如果输入字符串是“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))
- 创建数组count[]以存储字符数。
- 遍历输入字符串str,并对每个字符x=str[i]执行以下操作。 增量计数[x]。
- 再次遍历输入字符串,并对每个字符str[i]执行以下操作
- 如果计数[x]为1,则打印唯一字符
- 如果计数[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位)。
- 将计数[]中的所有值初始化为0,将索引[]中的所有值初始化为n,其中n是字符串的长度。
- 遍历输入字符串str,并对每个字符c=str[i]执行以下操作。
- 增量计数[x]。
- 如果计数[x]为1,则将x的索引存储在索引[x]中,即索引[x]=i
- 如果计数[x]为2,则从索引[]中删除x,即索引[x]=n
- 现在索引[]具有所有不同字符的索引。对索引进行排序并使用它打印字符。请注意,假设字符数是固定的(通常为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