对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。
给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
测试样例:
"qywyer23tdd",11
返回:y
webary
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)); } }