国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

字符串的距離version1.0

2019-11-14 22:11:27
字體:
來源:轉載
供稿:網友
字符串的距離version1.0
字符串的距離

題目來源:http://www.PRogramfan.com/acm/show.asp?qid=81Problem:設有字符串X,我們稱在X的頭尾及中間插入任意多個空格后構成的新字符串為X的擴展串,如字符串X為“abcbcd”,則字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的擴展串,這里“□”代表空格字符。 如果A1是字符串A的擴展串,B1是字符串B的擴展串,A1與B1具有相同的長度,那么我們定義字符串A1與B1的距離為相應位置上的字符的距離總和,而兩個非空格字符的距離定義為它們的ASCII碼的差的絕對值,而空格字符與其它任意字符之間的距離為已知的定值K,空格字符與空格字符的距離為0。在字符串A、B的所有擴展串中,必定存在兩個等長的擴展串A1、B1,使得A1與B1之間的距離達到最小,我們將這一距離定義為字符串A、B的距離。 請你寫一個程序,求出字符串A、B的距離。

Input有多組數據,每一組數據第一行為字符串A,第二行為字符串B,A、B均由小寫字母組成且長度均不超過2000,第三行為一個整數K,1≤K≤100,表示空格與其它字符的距離。

Output每組數據一行包含一個整數,表示要求的字符串A、B的距離。

Sample Inputcmcsnmn2Sample Output10

在學習了評論人wanshude_bhr的代碼后,發現其代碼存在一定的問題,對于下列這種情況:字符串A為:ax字符串B為:cbzyK值為:3

程序給出的答案為10,但實際結果為8。因此對于字符串A中i位(從0開始)元素,將其與B中所有元素比較,找出B中滿足Math.abs(a.charAt[i] - b.charAt[j]) < k的元素,并記錄最小的絕對值及其對應的下標j。修改后的程序能夠計算出上述情況的正確答案,但當A、B調換位置或者出現字符串A為azy字符串B為cbx時,程序無法正常運行。代碼如下:

package test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class DistanceOfStrings{    // first step:去除兩個字符串中相同的字母    // second step:去除字符串中距離小于k值的字母    public String deleteChar(String s, int n)    {        int l = s.length();        return s.substring(0, n) + s.substring(n + 1, l);    }}public static void main(String[] args){    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));    System.out.println("Please entry two strings and the value k:");    String a = "";    String b = "";    int k = 0;    int sum = 0;    int min = 0;    int p = 0;    boolean flag = false;    try    {          a = br.readLine().trim();        b = br.readLine().trim();    }    catch (IOException e)    {        e.printStackTrace();      }    try    {          k = Integer.parseInt(br.readLine());    }    catch (NumberFormatException e)    {        e.printStackTrace();      }    catch (IOException e)    {        e.printStackTrace();    }    DistanceOfStrings dos = new DistanceofStrings();    // first step:    for (int i = 0; i < a.length(); i++)    {        for (int j = 0; j < b.length(); j++)        {            if (a.charAt(i) == b.charAt(j))            {                a = dos.deleteChar(a, i);                b = dos.deleteChar(b, j);                i --;                j --;                break;            }          }    }    // second step:    for (int i = 0; i < a.length(); i++)    {        min = k;        for (int j = 0; j < b.length(); j++)        {            if (Math.abs(a.charAt(i) - b.charAt(j)) < min)            {                flag = true;                min = Math.abs(a.charAt(i) - b.charAt(j));                p = j;            }         }        if (flag == true)        {            sum += min;            a = dos.deleteChar(a, p);            b = dos.deleteChar(b, p);            i --;        }    }    sum += (a.length() + b.length()) * k;    System.out.println(sum);}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 衢州市| 邢台县| 商丘市| 沙田区| 神农架林区| 进贤县| 咸阳市| 淮南市| 龙门县| 安泽县| 射阳县| 罗田县| 筠连县| 禄丰县| 荥经县| 大余县| 海林市| 涞源县| 阿图什市| 巩留县| 安岳县| 临江市| 新营市| 邵东县| 常熟市| 同心县| 偃师市| 托克逊县| 泗洪县| 会同县| 赤城县| 通山县| 潮安县| 米脂县| 明水县| 建始县| 阜宁县| 英超| 澎湖县| 曲水县| 渝中区|