对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。
给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
测试样例:
"qywyer23tdd",11
返回:y
import java.util.*; public class FirstRepeat { public char findFirstRepeat(String A, int n) { // write code here char c=0; char[] cc = new char[n]; for (int i = 0; i < A.length(); i++) { if(A.charAt(i)!=32){ cc[i]=A.charAt(i); } } for (int i = 0; i <cc.length ; i++) { int m=A.split(String.valueOf(cc[i])).length; if(m>2){ c=cc[i]; break; } } return c; } }String类和数组都没有.lenght方法,好像有.size()错误的方法,编译环境是错的,用例也是错的
字符统计用map集合
import java.util.*; public class FirstRepeat { public char findFirstRepeat(String A, int n) { char result='A'; LinkedHashMap<String,Integer> map=new LinkedHashMap<>(); for(int i=0;i<n;i++) { String s=""+A.charAt(i); if(map.get(s)!=null)//map集合中已经有该字符 { result=s.charAt(0); return result; } else//map集合中没有该字符 { map.put(s,1); } } return result; } }
不会其他,使用最简单的
import java.util.*;
public class FirstRepeat {
public char findFirstRepeat(String A, int n) {
int arr[] =new int[n];
for(int i=0;i<n;i++) {
arr[i]=n;
for(int j=i+1;j<n;j++) {
if(A.charAt(i)==A.charAt(j)) {
arr[i]=j;
break;
}
}
}
int flag=0;
for(int i=1;i<n-2;i++) {
if(arr[i]<arr[flag]) {
flag=i;
}
}
return A.charAt(flag);
}
}
import java.util.*;
/** * 此题题目有些模棱两可,将题目的字符串都理解成字符串流更好一点。 * 即从一个字符串流中,找出第一个重复的字符,这样表述就可以方便大家理解。 * 理解简单遍历字符串并不可行。会采用Hash来做。 */ public char findFirstRepeat(String A, int n) { // write code here HashSet<Character> set = new HashSet<>(); for (int i = 0; i < A.length(); i++) { if (!set.add(A.charAt(i))) return A.charAt(i); } return ' '; }
import java.util.*; public class Coder { public String[] findCoder(String[] A, int n) { Arrays.sort(A, new Comparator<String>() { @Override public int compare(String o1, String o2) { return (o2.length() - o2.toLowerCase().replace("coder", "").length()) / "coder".length() - (o1.length() - o1.toLowerCase().replace("coder", "").length()) / "coder".length(); } }); return A; } }
//利用set,如果添加失败,表明重复 import java.util.*; public class FirstRepeat { public char findFirstRepeat(String A, int n) { // write code here Set<Character> set = new HashSet<Character>(); char[] ch = A.toCharArray(); for(int i=0;i<ch.length;i++){ if(!set.add(ch[i])){ return ch[i]; } } return ' '; } }
}
import java.util.*;public class FirstRepeat { public static char findFirstRepeat(String A, int n) { // write code here for(int i=0;i<n-1;i++){ for(int j=i-1;j>=0;j--){ if(A.charAt(i)==A.charAt(j)){ return A.charAt(i); } } } return '\0'; } public static void main(String [] args){ Scanner in=new Scanner(System.in); // while(in.hasnext){ String A=in.next(); int n=in.nextInt(); // } System.out.print(findFirstRepeat(A,n)); } }