字串轉換

2021-08-17 01:58:52 字數 1548 閱讀 4088

problem description

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

小西的串是 abba;

小明的串是 addba;

字元變化表 d b (表示d能轉換成b)。

那麼小明可以通過刪掉第乙個d,然後將第二個d轉換成b將串變成abba。

現在請你幫忙判斷:他們能不能通過魔法轉換使兩個人的串變成一樣呢?

input

首先輸入t,表示總共有t組測試資料(t <= 40)。接下來共t組資料,每組資料第一行輸入小西的字串,第二行輸入小明的字串(資料保證字串長度不超過1000,小明的串的長度大於等於小西的,且所有字元均為小寫字母)。接著輸入字母表,先輸入m,表示有m個字元變換方式(m< = 100),接著m行每行輸入兩個小寫字母,表示前乙個可以變為後乙個(但並不代表後乙個能變成前乙個)。

output

sample input

abba

addba

1d b

a dd

0

sample output

解題思路:

考慮到字串2的長度肯定大於等於字串1的長度,所以完全可以模擬著來做。將字串1的字串2從頭開始比較,如果兩個字串當前位置上的字元一樣的話,就都進行下乙個字元的比較;如果當前位置的字元不一樣,那麼我麼就要考慮能不能通過轉換表將字串2中的該字元轉化為與字串1中的當前字元一樣的,如果可以的話,就直接進行轉換,然後進行下乙個字元的比較,如果不行的話,只是字串2往後找有沒有能夠滿足當前字串1的字元,(找不到則就一直往後找),直到兩個串一樣(成功)或者字串2已經結束了(失敗)。

**篇:

#include 

#include

using

namespace

std;

int main()

for(i=0,j=0; iif(j==y)//如果第二個串進行完,直接不能完成

break;

if(arr[i]==brr[j])//如果相等,進行下一對的比較

while(arr[i]!=brr[j])

if(str[brr[j]-'a'][arr[i]-'a']==1)//如果不相等,但是能夠轉換,就轉換

else}}

if(flag==1)

cout

<< "case #"

<< endl;

else

cout

<< "case #"

<< endl;

z++;

}return

0;}

字串轉換

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

字串轉換

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

字串轉換

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