版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
题目描述
给定一个字符串str,和一个字母ch,请实现相应的代码求出一个数组,使数组中每个数字表示该位置与字母ch之间的最短距离。
比如:str= “lexinfintech” ch=“i”
则输出为:[3,2,1,0,1,1,0,1,2,3,4,5]
输入描述:
第一行为字符串
第二行为字母
输出描述:
一个数字数组
备注:
假定所有输入的字符串的字符ch都在字符串str中,且str中所有字母为小写,str长度不超过10000
输入样例:
Lexinfintech
i
输出样例:
[3,2,1,0,1,1,0,1,2,3,4,5]
package Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;
public class p118 {
public static void main(String[] args) {
Scanner s= new Scanner (System.in);
String str =s.next();
String ch =s.next();
int a[] =new int [str.length()]; //储存最后的结果
Collection c =new ArrayList();
for(int i=0;i<str.length();i++) {
if((str.substring(i, i+1).equals(ch))) {
c.add(i);
}
}
Iterator it =c.iterator(); //获取迭代器对象
while(it.hasNext()) {
int j=(int)it.next();
for(int i=0;i<str.length();i++) {
int k=Math.abs(j-i);
if(a[i]==0) {
a[i]=k;
}
if(k<a[i]) {
a[i]=k;
}
}
}
Iterator it1 =c.iterator();
while(it1.hasNext()) {
int j=(int)it1.next();
a[j]=0;
}
System.out.println(Arrays.toString(a));
}
}