樂信2018線上筆試程式設計題之一
阿新 • • 發佈:2018-12-15
原題大意是,輸入一個字串,和一個特定的字元,其中字元是字串其中的一個,然後求字串中的每一個字元距離這個特定字元的最短距離。
比如:
輸入 :lexiabiab
i
輸出:3,2,1,0,1,1,0,1,2
解題:
import java.util.Scanner; public class Main { public static void main(String[] args) { //輸入 Scanner in = new Scanner(System.in); String str = in.nextLine(); String ch = in.nextLine(); System.err.println(Main.getResult(str,ch)); in.close(); } public static String getResult(String str , String ch) { StringBuffer result = new StringBuffer(); char[] arrs = str.toCharArray();//轉換為字串 char c = ch.toCharArray()[0]; int preIndex=0;//儲存前一個ch字元所在的索引位置 for(int i=0;i<arrs.length;i++) { int index = getIndex(arrs,c,i); //獲取從i位置開始第一個c字元的索引位置 if(index ==0) index = preIndex; //如果返回0,表示沒找到,賦值為前一個索引位置 if(i<=index) //如果當前字元位置小於索引位置 { if(i>preIndex) { result.append(Math.abs(index-i)>Math.abs(preIndex-i)?Math.abs(preIndex-i)+",":Math.abs(index-i)+","); if(i == index) preIndex=index; } else { result.append(Math.abs(index-i)+","); preIndex=index; } } if(i>index) result.append(Math.abs(index-i)+","); } result.deleteCharAt(result.length()-1); return result.toString(); } //獲取從pos開始查詢,arrs中和c相等的位置索引,並返回 public static int getIndex(char[] arrs , char c,int pos) { for(int i=pos;i<arrs.length;i++) { if(arrs[i] == c) return i; } return 0; } }