字串轉換

2021-07-25 18:51:10 字數 1800 閱讀 2838

我們將僅由若干個同一小寫字母構成的字串稱之為簡單串,例如」aaaa」是乙個簡單串,而」abcd」則不是簡單串。現在給你乙個僅由小寫字母組成的字串,你需要用最小的花費,將其轉換成乙個簡單串。 花費的計算規則如下:將a到z這26個小寫字母從左到右排成一排,則每個字母都有左右兩個鄰居,我們認為a的左鄰居是z,z的右鄰居是a。乙個字母只能轉換成其相鄰的字母,轉換的花費為1。乙個字母可以進行多次轉換,例如將a轉換成d,可以進行如下的步驟: a->b->c->d,花費為3。字串的轉換花費為所有字母轉換花費之和。例如將字串」abbbz」轉換成簡單串的最小花費為3,轉換後的結果為」bbbbb」。

第一行乙個整數t(t≤100),表示測試資料的組數。 每組測試資料只有一行,為僅含小寫字母的字串,字串長度不超過1000。

對於每一組資料,輸出乙個整數,表示將字串轉換成簡單串的最小花費。

2

abbba

abbac

2

3

1.以a為基準,b轉換為a花費為1,轉換為z花費為1,轉換為c花費為2,轉換為y花費為2,以此類推可以得到乙個花費陣列spend[13];

2.遍歷一遍字串陣列str[n],得到字串的長度length和每個字母出現的次數儲存在character[26]陣列中

3.遍歷character[26]陣列,對character[i]不為0(為零表示對應字母沒有出現),進行轉換,計算將字串轉換為character[i]對應字母的總花費,找出最小值。

1.spend陣列

for(i = 1, j = 25; i

< 13, j > 13; i++, j--)

2.輸入並遍歷字串
scanf("%s",str);

while(str[i] != '\0')

i = 0;

計算花費
int

count = 0;

//初始化最小值

int min = 10000;

for(i = 0; i < 26; i++)

// 找出最小值

if(min > count)

min = count;}}

完整**
#include

int main()

; spend[13] = 13;

for(k = 0; k < n; k++)

;// 宣告字串

char

str[1001];

// 字串長度

int length = 0;

for(i = 1, j = 25; i < 13, j > 13; i++, j--)

// 輸入字串

scanf("%s",str);

// 計算字串長度和每個字母出現的次數

i = 0;

length = 0;

while(str[i] != '\0')

i = 0;

intcount = 0;

int min = 10000;

for(i = 0; i < 26; i++)

if(min > count)

min = count;}}

printf("%d\n", min);

}return

0;}

執行例項

字串轉換

problem description 小明和他的好朋友小西在玩乙個新的遊戲,由小西給出乙個由小寫字母構成的字串,小明給出另乙個比小西更長的字串,也由小寫字母組成,如果能通過魔法轉換使小明的串和小西的變成同乙個,那麼他們兩個人都會很開心。這裡魔法指的是小明的串可以任意刪掉某個字元,或者把某些字元對照...

字串轉換

編寫乙個程式,可以一直接收鍵盤字元 如果是小寫字元就輸出對應的大寫字元 如果接收的是大寫字元,就輸出對應的小寫字元 如果是數字不輸出 其餘原樣輸出。程式 如下 define crt secure no warnings include include include 該庫檔案isalnum 包含此函...

字串轉換

描述 我們將僅由若干個同一小寫字母構成的字串稱之為簡單串,例如 aaaa 是乙個簡單串,而 abcd 則不是簡單串。現在給你乙個僅由小寫字母組成的字串,你需要用最小的花費,將其轉換成乙個簡單串。花費的計算規則如下 將a到z這26個小寫字母從左到右排成一排,則每個字母都有左右兩個鄰居,我們認為a的左鄰...