周三

题目描述:给定两个字符串s和t,求是否存在一种将t中的字符重新排列后得到s的排列。

设计思路:

  1. 首先需要判断两个字符串是否长度相等,如果不相等则无法重新排列成相等的字符串。
  2. 统计字符串s中每个字符的出现次数,存储在一个freq数组中。
  3. 遍历字符串t,对于每个字符c,将freq[c]的值减一,如果freq[c]已经为负数,则说明字符串t中出现了比字符串s中更多的该字符,不可能重新排列为字符串s,直接返回false。
  4. 最后遍历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;
}
posted @ 2023-05-24 11:01  菜鸟de博客  阅读(10)  评论(0)    收藏  举报