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
abbasample outputaddba
1d b
a dd
0
解題思路:
考慮到字串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的左鄰...