Leetcode每日打卡-----反转字符串20201008+ 上升下降字符串

    科技2025-09-10  57

    文章目录

    T1.344.反转字符串1.题目描述2.题目示例3.思路及代码 T2.上升下降字符串1.题目描述2.题目示例3.思路及代码

    T1.344.反转字符串

    1.题目描述

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

    不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

    你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

    2.题目示例

    示例 1: 输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"] 示例 2: 输入:["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"]

    3.思路及代码

    思路:双指针,互换即可代码 class Solution { public void reverseString(char[] s) { int left = 0; int right = s.length - 1; while(left < right){ char temp = s[left]; s[left] = s[right]; s[right] = temp; left++; right--; } } }

    T2.上升下降字符串

    1.题目描述

    给你一个字符串 s ,请你根据下面的算法重新构造字符串:

    从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。 从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。重复步骤 2 ,直到你没法从 s 中选择字符从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。 从 s剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。重复步骤 5 ,直到你没法从 s 中选择字符。重复步骤 1 到 6 ,直到 s 中所有字符都已经被选过。在任何一步中,如果最小或者最大字符不止一个,你可以选择其中任意一个,并将其添加到结果字符串。请你返回将 s 中字符重新排序后的 结果字符串 。

    2.题目示例

    示例 1:

    输入:s = "aaaabbbbcccc" 输出:"abccbaabccba" 解释:第一轮的步骤 1,2,3 后,结果字符串为 result = "abc" 第一轮的步骤 4,5,6 后,结果字符串为 result = "abccba" 第一轮结束,现在 s = "aabbcc" ,我们再次回到步骤 1 第二轮的步骤 1,2,3 后,结果字符串为 result = "abccbaabc" 第二轮的步骤 4,5,6 后,结果字符串为 result = "abccbaabccba" 示例 2: 输入:s = "rat" 输出:"art" 解释:单词 "rat" 在上述算法重排序以后变成 "art" 示例 3: 输入:s = "leetcode" 输出:"cdelotee" 示例 4: 输入:s = "ggggggg" 输出:"ggggggg" 示例 5: 输入:s = "spo" 输出:"ops" 提示: 1 <= s.length <= 500 s 只包含小写英文字母。

    3.思路及代码

    思路:先计数,统计每个字符出现的次数,由于只是小写字母,存放进长度为26的数组即可。接下来,正向反向各自遍历即可。代码: class Solution { public String sortString(String s) { //统计字符出现次数 int[] count = new int[26]; for(char c : s.toCharArray()){ count[c - 'a']++; } //定义结果字符串 StringBuilder res = new StringBuilder(); //只要res的长度小于s的长度,说明还不符合要求 while(res.length() < s.length()){ //从小到大 for(int i = 0; i <= 25; i++){ if(count[i] > 0){ //用过一次要-- count[i]--; res.append((char)(i + 97)); } } //从大到小 for(int i = 25; i >= 0; i--){ if(count[i] > 0){ count[i]--; res.append((char)(i + 97)); } } } //返回结果字符串 return res.toString(); } }
    Processed: 0.026, SQL: 8