示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
public static void fun(String s){
int count[]=new int[26]; //记录每个字母是否出现过,没出现过就是0
for(int i=0;i<s.length();i++)
{
if(count[s.charAt(i)-'a']==0){ //这个刚好算出来每个字母对应的位置
System.out.print(s.charAt(i));
count[s.charAt(i)-'a']++;
}
}
}
2.压缩字符串
1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
public static void fun(String s){
int count=1; //出现一次的时候都是1
ArrayList list=new ArrayList();
char a[]=s.toCharArray();
for(int i=0;i<a.length;i++)
{
int j=i+1;
if(j<a.length&&a[j]==a[i]){
count++;//多出现一次就加1
j++; //指针往后移动
}
if(count==1)
list.add(a[i]);//一次的时候就直接添加字母
else{
list.add(count);// 不是一次的时候就添加次数再添加字母
list.add(a[i]);
count=1;
i=j-1; //把i指向最后不等于的那个因为i会自增所以指向前一个
}
}
Iterator it=list.iterator();
while(it.hasNext())
System.out.print(it.next().toString());
}
3.约瑟夫环问题
输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺 比如: 输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)
public static void fun(String s,int n){
char c[]=s.toCharArray();
ArrayList list=new ArrayList();
for(int i=0;i<c.length;i++)
list.add(c[i]);
int count =n;
for(int i=0;i<c.length;i++){
int temp=(n-1)%list.size();
System.out.print(list.get(temp));
list.remove(temp);
n=temp+count;
}
}
4.数组比较(20分) • 问题描述:
比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数
比如:数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0 数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3 • 要求实现函数:
int array_compare(int len1, int array1[], int len2, int array2[]) • 示例
1) 输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5 函数返回:0
2) 输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6 函数返回:3
我用java写:
public static int array_compare(int []a,int []b,int len1,int len2){
int len=len1<len2?len1:len2; //先算出最短的
int count=0;
for(int i=0;i<len;i++){ //比较次数为最短数组的那个
if(!(a[len1-i-1]==b[len2-i-1])) //要倒着比就是数字最大的-1比len个就是len1-i-1
count++; //从len1-1倒数len个两个数组比较,不同计数器加1
}
return count;
}