สมมติว่าเรามีสามสาย S, T และ U ที่มีความยาวเท่ากัน n สำหรับทุกดัชนี i ในช่วง 0 ถึง n-1 เราต้องสลับ U[i] ด้วย S[i] หรือ T[i] โดยรวมแล้วเราได้ดำเนินการสลับ n ครั้ง เราต้องตรวจสอบว่าหลังจากการดำเนินการ n ดังกล่าวเราสามารถสร้างสตริง S เหมือนกับ T ได้หรือไม่
ดังนั้น ถ้าอินพุตเป็น S ="abc"; T ="bca"; U ="bca" ผลลัพธ์จะเป็น True เพราะสำหรับ i ทั้งหมด ถ้าเราสลับ U[i] กับ S[i] มันจะเป็น "bca" และ T เป็น "bca" อยู่แล้ว
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
for initialize i := 0, when S[i] is non-zero, update (increase i by 1), do: if S[i] is not equal to U[i] and T[i] is not equal to U[i], then: return false return true
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; bool solve(string S, string T, string U) { for (int i = 0; S[i]; ++i) if (S[i] != U[i] && T[i] != U[i]) return false; return true; } int main() { string S = "abc"; string T = "bca"; string U = "bca"; cout << solve(S, T, U) << endl; }
อินพุต
"abc", "bca", "bca"
ผลลัพธ์
1