【每日一题 | 24.10.8】确定字符串是否是另一个的排列
上期回顾:【每日一题 | 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;
else
cout << "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");
else
System.out.println("NO");
scan.close();
}
}
最后,感谢您的阅读,期待您的一键三连!
原文地址:https://blog.csdn.net/2302_80269373/article/details/142762656
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!