首页 > 试题广场 >

给定一个字符串,请写一段代码找出这个字符串中首先出现两次的那

[问答题]
给定一个字符串,请写一段代码找出这个字符串中首先出现两次的那个字符。 例如字符串为"qywyer23tdd",输出为y。
楼上都是用的泛型,我用的字符的截取分割成数组,然后判断数组的长度是不是大于2即可。
String str = "ywer23td";
for (int i = 0; i < str.length(); i++) {
if (str.split(String.valueOf(str.charAt(i))).length > 2) {
System.out.println(str.charAt(i));
break;
}
}

发表于 2015-04-28 10:26:32 回复(0)
更多回答
推荐
class Solution{
    char firstTwiceChar(string s){
         if(s.size()<=1)return '';
         unsigned int hashTable[256];//字符是8bit类型,最多有256种,开辟1k空间当做hash表
         for(auto i = 0; i < 256; i++)hashTable[i] = 0;
         for(auto i = 0; i < s.size(); i++){
            if(++hashTable[s[i]] == 2)
                return s[i];
        }
    return '';//没有出现两次的字符
    }
}

编辑于 2015-04-30 14:07:19 回复(0)
char first_double_char(const char *str)
{
    int len=strlen(str);
    char first_double;
    bool isfound=false;
    for(int i=1;i!=len-1;i++)
    {
        char temp=str[i];
        for(int j=0;j!=i;j++)
        {
            if(str[j]==temp)
            {
                first_double=temp;
                isfound=true;    
            }
            if(isfound)
                break;
        }
        if(isfound)
                break;
    }
    return first_double;
}
发表于 2015-05-07 11:11:03 回复(0)
C语言有注释版!
#include <stdio.h>

int main(int argc, const char * argv[]) {

    char string[100]={};

    int count=0;

    while (scanf("%c",&string[count]),string[count]!='\n') {//输入字符串并且求得字符串有效长度(既可见长度)

        count++;

    }

    for (int i=0; i<count; i++) {//遍历字符串

        int j=i;

        while (j<count&&string[++j]!=string[i]) {//判断当前i字符后有没有字符与之相同,直到字符串结尾

        }

        if (string[j]==string[i]) {//当有一样的打印该字符,并退出程序

            printf("%c",string[j]);

            return 0;

        }

    }

    return 0;

}

发表于 2015-04-29 11:02:52 回复(0)
javascript版:
var str = 'qyqwyqer23tdd';
for (var i = 0; i < str.length; i++) {
  var temp = str.substring(0, i + 1); //截取0至i间的字符
  var char = str.charAt(i); //截取当前字符 
  if (temp.indexOf(char) - temp.lastIndexOf(char) !== 0) {
    console.log(char);
    break; 
  }
} 

编辑于 2015-04-28 13:36:32 回复(0)
public class FindFirstTwiceChar {
	public static void main(String[] args) {
		String s = "qywcel23tld";
		System.out.println(new FindFirstTwiceChar().find(s));
	}
	
	public char find(String str) {
		char[] charArray = str.toCharArray();
		int length = str.length();
		for(int i = 1; i < length; i++) {
			for(int j = 0; j < i; j++) {
				if(charArray[i] == charArray[j]) {
					return charArray[i];
				}
			}
		}
		return 0;
	}
}

发表于 2015-09-07 16:42:04 回复(0)
function find3(str){
	str=String(str);
	var len=str.length;
	var count=1;
	var occur="";
	for (var i = 0; i < len-1; i++) {
		for (var j = i+1; j < len; j++) {
			if(str[i]==str[j]){
				++count;
				occur=str[j]
			}
			if(count>=3){
				return occur;
			}
		}
		occur=""
		count=1;

	}
	return count>=3?occur:"";
}

发表于 2016-11-29 12:42:55 回复(0)
//双层for循环解决方案
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char str[64] = "qywyer23tdd";
    int i,j;
    char ch;
    for(i = 0;i < strlen(str);++i)
    {
        ch = str[i];
        for(j = i+1;j < strlen(str);++j)
        {
            if(ch == str[j])
               printf("%c",str[i]);
            i = strlen(str);
            break;
        }
    }
}

发表于 2015-09-11 10:32:33 回复(0)
 public static Character firstDup(String s){
  Set<Character> set = new HashSet<Character>();//可利用set重查来实现
  char[] string = s.toCharArray();
  for(char tmp : string){
   if(set.contains(tmp)){
    return tmp;
   }else{
    set.add(tmp);
   }
  }
  return null;
 }

发表于 2015-09-05 14:53:27 回复(0)
#include <iostream>
#include <math.h>
#include <string>

using namespace std;

char FirstDoubleChar(char * str)
{
if(str==NULL)
return 0;

int len=strlen(str);
int first = len+1;
int j=0;

for(int i=0;i<len;i++)
for(j=i+1;j<len;j++)
{
if(str[i]==str[j])
if(j<first)
{
first=j;
break;
}
}
return str[first];
}
发表于 2015-08-26 18:56:36 回复(0)
#include<iostream>
#include<string>
using namespace std;
char FirstNotRepeatingChar(string str);
int main()
{
string str = "qywyyer23td";
char result=FirstNotRepeatingChar(str);
cout << result << endl;
}
char FirstNotRepeatingChar(string str)
{
if (str.size() == 0)
return ' ';
int hash[256] = { 0 };
int i = 0;
while (str[i] != '\0')
{
hash[str[i]]++;
i++;
}
i = 0;
bool flag = true;
while (str[i] != '\0')
{
if (hash[str[i]] == 2)
{
flag = false;
return str[i];
break;
}
i++;
}
if (flag == true)
return ' ';
}
发表于 2015-08-15 22:05:41 回复(0)
用list保存循环的字符,如果list中存在这个字符,则表示出现了第二次。再用list的contains方法找是否包含
发表于 2015-06-03 12:55:19 回复(0)
import java.util.Scanner;
public class FirstOccur{

public static void main(String[] args){


System.out.print("请输入一个字符串:");
Scanner input=new Scanner(System.in);

String str=input.next().toString();
FirstO(str);

}
public static void FirstO(String s){
char[] c=s.toCharArray();
int i,j;
for(i=0;i<c.length;i++){
   for(j=i+1;j<c.length;j++){

   if(c[i]==c[j]){
   System.out.println("首先出现两次的字符:"+c[i]);
   return ;
}
}
}
}

}
发表于 2015-05-29 11:54:37 回复(0)
javascript:
var str = 'qyqwyqer23tdd';
for(var i = 0,l = arr.length;i < l;i ++){
  if(str.split(str.charAt(i)).length == 3){
    console.log(arr[i]);
    break;
  } 
}

编辑于 2015-05-16 20:33:31 回复(0)
礼头像
int a[128] = {0};
char find(char[] c,int len)
{
    int i = 0;
    int b = 0;
    for(i=0;i<len;i++)
    {
        b = c - '\0';
        a[b]++;
        if(a[b] == 2)
            return c[i];
    }
    return '\0';
}
发表于 2015-05-15 09:24:28 回复(0)
#include <stdio.h>
 int main()
 {
     char flag[256];
     memset(flag,0x00,sizeof(flag);
     const char * str = "qywyer23tdd";
     const char * p = str;
     while(0!=*p) {
         if ( flag[(unsigned char)(*p)]!=0x00 ) {
             printf("%c\n");
             break;
         }
         flag[(unsigned char)(*p)] = 0x01;
         ++p;
     }
     return 0;
 }

编辑于 2015-05-12 17:33:36 回复(0)
public static Character firstDup(String s){
        HashMap<Character, Integer> charCountMap = new HashMap<>();
        for(int i = 0; i < s.length(); i++){
            if(charCountMap.containsKey(s.charAt(i))){
                return s.charAt(i);
            }else
                charCountMap.put(s.charAt(i), 1);
        }
        return null;
    }

使用hashmap
发表于 2015-05-04 15:35:00 回复(0)
直接hash做
发表于 2015-05-02 11:09:46 回复(0)
如果长度小于2  没有
长度大于二   那么判断字符数组  第n位与前面n-1个字符是否有一样的
public class Main {
    public static void Choose(String s){
        if(s.length()<=1){
            return;
        }
        char[] c = s.toCharArray();
        for (int i = 1; i < c.length; i++) {
            for(int j=0;j<i;j++){//第i+1位与前面i个字符是否有一样的
                if(c[i]==c[j]){
                    System.out.println(c[i]);
                    return;
                }
            }
        }
        return;
    }
    
    public static void main(String[] args) {
        String s="qywyer23tdd ";
        Choose(s);
    }

}

编辑于 2015-04-29 17:40:14 回复(0)
来个 python 版:
import sys

def get_first_repeat_char(src):
    consumed = []
    for c in src:
        if not c in consumed:
            consumed.append(c)
        else:
            return c
    return "no repeat char in this string"

if __name__ == '__main__':
    print(get_first_repeat_char(sys.argv[1]))

发表于 2015-04-29 00:13:11 回复(0)

java实现版本:

发表于 2015-04-28 19:21:16 回复(0)