题目描述:给定两个字符串s和t,求是否存在一种将t中的字符重新排列后得到s的排列。
设计思路:
- 首先需要判断两个字符串是否长度相等,如果不相等则无法重新排列成相等的字符串。
- 统计字符串s中每个字符的出现次数,存储在一个freq数组中。
- 遍历字符串t,对于每个字符c,将freq[c]的值减一,如果freq[c]已经为负数,则说明字符串t中出现了比字符串s中更多的该字符,不可能重新排列为字符串s,直接返回false。
- 最后遍历freq数组,如果有任何值不为0,则说明字符串t不可能重新排列为字符串s,直接返回false。
程序流程图:
开始
if s.length() != t.length():
返回 false
定义freq数组,用于统计字符串s中每个字符的出现次数
for i in [0, s.length()-1]:
freq[s[i]]++
for i in [0, t.length()-1]:
freq[t[i]]--
if freq[t[i]] < 0:
返回 false
for i in [0, 255]:
if freq[i] != 0:
返回 false
返回 true
结束
代码实现:
#include <string>
#include <vector>
using namespace std;
bool canPermute(string s, string t) {
if (s.length() != t.length()) {
return false;
}
vector<int> freq(256, 0); // 初始化为0
for (int i = 0; i < s.length(); i++) {
freq[s[i]]++;
}
for (int i = 0; i < t.length(); i++) {
freq[t[i]]--;
if (freq[t[i]] < 0) {
return false;
}
}
for (int i = 0; i < 256; i++) {
if (freq[i] != 0) {
return false;
}
}
return true;
}
标签:false,++,length,周三,重新排列,字符串,freq
From: https://www.cnblogs.com/zeyangshuaige/p/17427410.html