问题1、在一个字符串中,查找第一个只出现一次的字符
import java.util.ArrayList;
public class Paixu {
public static void main(String[] args) {
checkone("fdfdsfffffffefekjfese");
checktwo("fdfdsfffffffefekjfese");
}
/* 1、转换为有顺序的取数组
* 2、第一个字符,逐步和数组中的后面的字符相比较,并计数,
* 3、如果循环完一轮,计数还是为1就是第一个个出现的 */
public static void checkone(String s){
char[] c=s.toCharArray();
for(int i=0;i<c.length;i++){
int flag=0;
for(int j=0;j<c.length;j++){
if(c[i]==c[j]){
flag++;
}
}
if(flag==1){
System.out.println("第一种方法:字符串中第一个出现一次的字符为"+c[i]);
return;
}
}
}
/*
* 1、新建一个List,利用list的有序
* 2、从数组的第一个字符开始向list中放,如果list中存在,则删除list中元素,如果没有则放到list中,
* 3、由于list有序的,然后取出list中的第一个,就是需要的字符 */
public static void checktwo(String s){
char[] c=s.toCharArray();
ArrayList l=new ArrayList();
for(int i=0;i<c.length;i++){
String v = String.valueOf(c[i]);
if(l.contains(v)){
l.remove(v);
}else{
l.add(v);
}
}
if(l.size()==0){
System.out.println("不存在");
}else{
System.out.println("第二种方法,字符串中第一个出现一次的字符为"+l.get(0));
}
}
}
问题:2、两个有序数组,合并为一个有序数组;(归并排序)
public class GuiBingPaiXu {
public static void main(String[] args){
int[] a={1,3,4,6,7,8,9};
int[] b={2,5,8,10,12};
int l = a.length+b.length;
int[] c=new int[l];
int m=0;
int n=0;
int i=0;
while(m<(a.length)&n<(b.length)){
/*设置游标m,n,然后分别从第一位开始比较,
比出小的放到提前的空数组的第一位,依次向下排列,只要小的就往数组里放;*/
if(a[m]>b[n]){
c[i]=b[n];
i++;
n++;
/*如果b数组已经排完序了,那么就直接把a还没有排序的直接放到后面*/
if(n==(b.length)){
while(i<l){
c[i]=a[m];
i++;
m++;
}
}
}else{
c[i]=a[m];
i++;
m++;
/*如果数组a已经已经比完了,那么把b数组还没有比较的直接放在后面*/
if(m==(a.length)){
while(i<l){
c[i]=b[n];
i++;
n++;
}
}
}
}
/*打印排序后的数组*/
for(int z:c){
System.out.print(z+",");
}
}
}
问题3、把一个字符翻转过来显示(先转换为char数组,然后把数组倒置过来)
public class Daozhi {
public static void main(String[] args){
String s="hello java";
char[] c=s.toCharArray();
char[] cc=new char[c.length];
int j=0;
int i=c.length-1;
while(i>=0){
cc[j]=c[i];
j++;
i--;
}
for(char r:cc){
System.out.print(r);
}
}
}