將字串 Str1 轉換為 Str2,方法是將 B 向右移動,將 A 向左移動,且兩者不能交叉。
本文旨在實現一個程式,透過將 B 向右移動,將 A 向左移動,且兩者不交叉的方式,將字串 Str1 轉換為 Str2。
眾所周知,在 C 程式設計中,字串是一組以空字元“\0”結尾的字元。C 字串中的字元儲存在字元陣列中。C 字串與字元陣列的區別在於它以獨特的字元“\0”結尾。
示例
Let us take the input strings, str1 = “#B#A#”, and str2 = “##BA#” Output obtained here is: Yes
說明 − 'B' 單步向右移動一個空格。因此字串變為“##BA#”,這與最終的 s2 字串相同。
示例
Let us take the input strings, str1 = “#A#B#”, and str2 = “#B#A#” Output obtained here is : Yes
問題陳述
實現一個程式,透過將 B 向右移動,將 A 向左移動,且兩者不交叉的方式,將字串 Str1 轉換為 Str2。
方法
根據以上觀察,解決問題的思路如下:
當字串滿足要求時,機器人可以移動到最終位置。
由於不允許 A 和 B 交叉,因此在刪除空空格 '#' 後,兩個字串應該相同。
如果在從兩個字串中刪除 '#' 後,s2 中 'A' 的位置與 s1 中不同,'B' 的位置也與 s1 中不同。
演算法
以下是將字串 S1 轉換為 S2(透過將 B 向右移動,將 A 向左移動,且兩者不交叉)的程式演算法:
步驟 1 − 實現一個函式來檢查機器人是否可以移動。
步驟 2 − 定義陣列 a1 和 a2,用於儲存不包含 '#' 的字串 str1 和 str2。
步驟 3 − 檢查第一個條件:字串 s1 和 s2 必須完全匹配,沒有任何間隙。
步驟 4 − 'A' 和 'B' 在 str1 和 str2 中的相對位置分別儲存在 v1 和 v2 中。
步驟 5 − 檢查條件 2:字串 str1 中 'A' 的位置和字串 str2 中 'B' 的位置應該大於或等於彼此,並且 'A' 和 'B' 的位置應該小於或等於彼此。
步驟 6 − 列印結果作為輸出。
示例(C 程式)
以下是上述演算法的 C 程式實現,用於透過將 B 向右移動,將 A 向左移動,且兩者不交叉的方式,將字串 S1 轉換為 S2。
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool moveRobots(char str1[], char str2[]) {
char a1[100], a2[100];
int a1Index = 0, a2Index = 0;
for (int i = 0; str1[i] != '\0'; i++) {
if (str1[i] != '#')
a1[a1Index++] = str1[i];
}
a1[a1Index] = '\0';
for (int i = 0; str2[i] != '\0'; i++) {
if (str2[i] != '#')
a2[a2Index++] = str2[i];
}
a2[a2Index] = '\0';
if (strcmp(a1, a2) == 0) {
int n = strlen(a1);
int v1[100], v2[100];
int v1Index = 0, v2Index = 0;
for (int i = 0; str1[i] != '\0'; i++) {
if (str1[i] != '#')
v1[v1Index++] = i;
}
for (int i = 0; str2[i] != '\0'; i++) {
if (str2[i] != '#')
v2[v2Index++] = i;
}
if (a1[0] == 'A' && v1[0] < v2[0])
return false;
if (a1[0] == 'B' && v1[0] > v2[0])
return false;
for (int i = 1; i < n; i++) {
if (a1[i] == 'A') {
if (v1[i] < v2[i])
return false;
} else {
if (v1[i] > v2[i])
return false;
}
}
return true;
}
return false;
}
int main() {
char str1[] = "#B#A#";
char str2[] = "##BA#";
if (moveRobots(str1, str2))
printf("Yes
");
else
printf("No
");
return 0;
}
輸出
執行後,將產生以下輸出:
Yes
結論
同樣,我們可以透過將 B 向右移動,將 A 向左移動,且兩者不交叉的方式,將字串 S1 轉換為 S2。本文解決了實現將字串 S1 轉換為 S2(透過將 B 向右移動,將 A 向左移動,且兩者不交叉)的程式的難題。
本文提供了 C 程式設計程式碼以及實現將字串 S1 轉換為 S2(透過將 B 向右移動,將 A 向左移動,且兩者不交叉)的程式的演算法和方法。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP