33,006
社区成员
发帖
与我相关
我的任务
分享
public class SearchFirstUniqueChar {
public static void main(String[] args) {
String string = "instantiation";
char c = searchFirstUniqueChar(string);
if (c != 0) {
System.out.println(String.format("The char is :%s", c));
}else {
System.out.println(String.format("No unique char"));
}
}
private static char searchFirstUniqueChar(String string) {
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
int lastIndexOf = string.lastIndexOf(c);
if (lastIndexOf == i) {
return c;
}
//可加缓存保留已经检测过的支付,但是对小规模字符串无意义
}
return 0;
}
}
private static char findChar(string chars)
{
char value = ' ';
if (chars != null && chars.Length != 0)
{
int count = 0, index = -1;
long bits = 0, deleteBits = 0, andValue;
long[] valueArray = new long[52];
char[] charArray = new char[52];
foreach (char c in chars)
{
if ((andValue = (c >= 'a' || c <= 'z' ? (1L << (c - 'a')) : (c >= 'A' || c <= 'Z' ? (1L << ((c - 'a') + 32)) : 0))) != 0)
{
if ((bits & andValue) == 0)
{
bits |= andValue;
valueArray[++index] = andValue;
charArray[index] = c;
}
else
{
deleteBits |= andValue;
if ((++count) == 52) break;
}
}
}
if (count != 52 && index != -1)
{
for (count = 0; count <= index && (deleteBits & valueArray[count]) != 0; count++) ;
if (count <= index) value = charArray[count];
}
}
return value;
}
char search(char*Str)
{
unsigned char flag[256];
unsigned char*S=reinterpret_cast<unsigned char*>(Str);
memset(flag,0,256);
int nLen=strlen(str);
char result=0;
for(i=0; i<nLen;++i)
{
++flag[S[i]];
if(flag[S[i]]==1)
result=S[i];
else if(flag[S[i]]==2){
if(result==S[i])
result=0;
}
else
flag[S[i]]=3;
}
return result;
}
int search(char *Str)
{
int pos = -1;
unsigned char flag[256];
unsigned char * S = reinterpret_cast<unsigned char *>(Str);
memset(flag, 0, 256);
for(i=0; S[i]!='\0'; ++i)
{
++flag[S[i]];
if (flag[S[i]] > 1) flag[S[i]] = 2;
}
for(i=0; S[i]!='\0'; ++i)
{
if (flag[S[i]] == 1)
{
pos = i;
break;
}
}
return pos;
}
#include <stdio.h>
#include <stdlib.h>
void search(char *S, char *c)
{
int i, j, k;
for(i=0; S[i]!='\0'; i++)
{
k = 0;
for(j=0; S[j]!='\0'; j++)
{
if(i == j)
continue;
if(S[i] == S[j])
{
k++;
break;
}
}
if(k == 0) {
*c = S[i];
return;
}
}
}
void main()
{
char s[50] = "instantiation", c;
search(s, &c);
printf("字符串 %s 中第一个不重复的字符是:%c \n", s, c);
}