字符交换

小欧的字符交换
小欧拿到了两个长度相等的字符串ss和tt。她想知道能否交换ss中两个相邻的字符,使得ss和tt相等?请注意,最多只有1次交换的机会!
一共有tt组询问。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述:
第一行输入一个正整数

q

,代表询问次数。
每组输入两行仅包含小写字母字符串,分别代表字符串

s

和字符串

t


s

t

的长度不超过100。
输出描述:
对于每组询问,输出一行答案。若可以交换两个相邻字符使得

s

t

相等,则输出"Yes"。否则输出"No"。
示例1
输入例子:
3
acb
cab
abcxz
cbaxz
wa
wa
输出例子:
Yes
No
Yes
例子说明:
第一组询问,交换前两个字符即可。
第二组询问,无法进行一次“交换相邻两个字符”使得两字符串相等。
第三组询问,字符串本身相等,不需要交换。

public class Program
{
    public static void Main()
    {
        int q = int.Parse(System.Console.ReadLine());
        string[][] patterns = new string[][] {
            new string[]{"r", "e", "d"},
            new string[]{"r", "d", "e"},
            new string[]{"e", "d", "r"},
            new string[]{"e", "r", "d"},
            new string[]{"d", "e", "r"},
            new string[]{"d", "r", "e"},
        };

        for (int i = 0; i < q; i++)
        {
            string p = System.Console.ReadLine();
            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
            bool fount = true;

            foreach (var pattern in patterns)
            {
                stringBuilder.Clear();
                fount = true;
                for (int j = 0; j < p.Length; j++)
                {
                    char c = p[j];

                    if (c != '?' && c.ToString() != pattern[j % 3])
                    {
                        fount = false;
                        break;
                    }
                    stringBuilder.Append(pattern[j % 3]);
                }
                if (fount)
                    break;
            }
            if (fount)
            {
                System.Console.WriteLine(stringBuilder.ToString());
            }
            else
            {
                System.Console.WriteLine("No");
            }

        }

    }

}

 

 

posted @ 2025-03-18 14:45  燕钰达  阅读(36)  评论(0)    收藏  举报