- 1. 题目
- 2. 解题思路
- 3. 代码实现(AC_Code)
上期回顾:【每日一题 | 24.10.7】Fizz Buzz 经典问题
个人主页:C_GUIQU
归属专栏:每日一题
1. 题目
确定字符串是否是另一个的排列
2. 解题思路
题目核心要求:理解字符串排列,判断str2是否为str1的排列。
排列:如果将 str1的字符拆分开,重新排列后再拼接起来,能够得到str2,那么就说字符串str2是字符串str1的排列。(不忽略大小写)
第一步:将str1、str2分别进行冒泡排序(这里按照从小到大排序)。
第二步:判断两个字符是否相等。
3. 代码实现(AC_Code)
- C++
#include <iostream>
#include <cstring> //包含 strlen 函数 using namespace std;int main()
{// 定义有长度限制的字符数组char str1[100];char str2[100];cin >> str1 >> str2;// 冒泡排序:将str1排序for(int i = 0; i < strlen(str1) - 1; i++){// 最后i个元素已经排序好,不用重复遍历for(int j = 0; j < strlen(str1) - 1 - i; j++){if(str1[j+1] < str1[j]){char temp = str1[j];str1[j] = str1[j + 1];str1[j + 1] = temp;}}}// 冒泡排序:将str2排序for(int i = 0; i < strlen(str2) - 1; i++){// 最后i个元素已经排序好,不用重复遍历for(int j = 0; j < strlen(str2) - 1 - i; j++){if(str2[j+1] < str2[j]){char temp = str2[j];str2[j] = str2[j + 1];str2[j + 1] = temp;}}}// 用strcmp函数判断两个字符是否相等if(strcmp(str1,str2) == 0)cout << "YES" << endl;elsecout << "NO" << endl;return 0;
}
- Java
import java.util.Scanner;
import java.util.Arrays;public class Main {// 冒泡排序public static void sort(char[] array,int n) {for(int i = 0; i < n - 1; i++) {for(int j = 0; j < n - 1 - i; j++) {if(array[j + 1] < array[j]) {char temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 输入两行字符串String str1 = scan.nextLine();String str2 = scan.nextLine();// Java中的字符串是不可变的,所以我们需要将输入的字符串转换为字符数组来执行排序操作char[] s1 = str1.toCharArray();char[] s2 = str2.toCharArray();// 排序sort(s1,str1.length());sort(s2,str2.length());// 将排序后的字符数组转换为字符串str1 = new String(s1);str2 = new String(s2);// 判断字符串是否相等if(str1.equals(str2))System.out.println("YES");elseSystem.out.println("NO");scan.close();}
}
最后,感谢您的阅读,期待您的一键三连!