首页 > 其他分享 >3216. 交换后字典序最小的字符串

3216. 交换后字典序最小的字符串

时间:2024-10-30 10:43:38浏览次数:1  
标签:字符 3216 arr 交换 奇偶性 字符串 字典

给你一个仅由数字组成的字符串 s,在最多交换一次 相邻 且具有相同 奇偶性 的数字后,返回可以得到的
字典序最小的字符串

如果两个数字都是奇数或都是偶数,则它们具有相同的奇偶性。例如,5 和 9、2 和 4 奇偶性相同,而 6 和 9 奇偶性不同。

示例 1:

输入: s = "45320"

输出: "43520"

解释:

s[1] == '5' 和 s[2] == '3' 都具有相同的奇偶性,交换它们可以得到字典序最小的字符串。

示例 2:

输入: s = "001"

输出: "001"

解释:

无需进行交换,因为 s 已经是字典序最小的。

提示:

2 <= s.length <= 100
s 仅由数字组成。

解题思路:
1.通过比较字符串中相邻字符的值,并在特定条件下交换它们的位置,来构造一个字典序最小的字符串
2.特定条件是:当前字符的值大于下一个字符,且它们的值奇偶性相同

完整代码:
     /**
       * 获取字典序最小的字符串
       * 该方法通过比较字符串中相邻字符的值,并在特定条件下交换它们的位置,来构造一个字典序最小的字符串
       * 特定条件是:当前字符的值大于下一个字符,且它们的值奇偶性相同
       *
       * @param s 输入的字符串
       * @return 经过调整后字典序最小的字符串
       */
      public static String getSmallestString(String s) {
          // 将输入字符串转换为字符数组,便于逐个字符处理
          char[] arr = s.toCharArray();
          // 遍历字符数组,直到倒数第二个字符,因为需要比较当前字符和下一个字符
          for (int i = 0; i + 1 < arr.length; i++) {
              // 如果当前字符的值大于下一个字符,且它们的值奇偶性相同,则交换它们
              // 这个条件确保了交换后字符串的字典序会变小
              if (arr[i] > arr[i + 1] && arr[i] % 2 == arr[i + 1] % 2) {
                  // 交换相邻两个字符的位置
                  char temp = arr[i];
                  arr[i] = arr[i + 1];
                  arr[i + 1] = temp;
                  // 一旦发生交换,立即结束循环,因为仅需一次交换来满足字典序最小的条件
                  break;
              }
          }
          // 将处理后的字符数组转换回字符串并返回
          return new String(arr);
      }

标签:字符,3216,arr,交换,奇偶性,字符串,字典
From: https://www.cnblogs.com/java-cheng/p/18515362

相关文章

  • Leetcode 3216. 交换后字典序最小的字符串
    因为字符串长度只有100,所以直接模拟就行了。字符串比较不想写的话,可以用C的strcmp1classSolution{2public:3stringswap(string&s,inti,intj){4stringres="";5for(intk=0;k<i;k++)6res+=s[k];7res+=s[j];......
  • [LeetCode] 3216. Lexicographically Smallest String After a Swap
    Givenastringscontainingonlydigits,returnthelexicographicallysmalleststringthatcanbeobtainedafterswappingadjacentdigitsinswiththesameparityatmostonce.Digitshavethesameparityifbothareoddorbothareeven.Forexample,5......
  • 字典树
    字典树(Trie)支持\(O(|s|)\)插入/查询一个字符串。空间复杂度为\(O(|s|_{\max}|\Sigma|)\)。01Trie即\(\Sigma=\{0,1\}\)的字典树,类似二进制,插入/查询一个数复杂度为\(O(\logx)\)。空间复杂度貌似是\(O(\logx)\)的?这种数据结构可以用来维护异或等基本操作,由于不需要......
  • 【OJ题解】C++ 把字符串转换成整数
    ......
  • 字符串匹配-KMP算法实现代码
    字符串的基本操作同上一篇BF算法一致一.为模式串创建临时数组//KMP算法//1)为模式串创建临时数组voidcomputeLPSArray(char*pat,intM,int*lps){ //指向首元素 intj=0; //指向首元素的下一个元素 inti=1; //临时数组的首元素总为0 lps[0]=0; //结束条......
  • 用人话讲计算机:小白版Python篇!(四)关于列表、集合、字典、元组初步认识
    注:本章节所写列表、集合、字典、元组等均只涉及初步认识,重在理解,后续会出相关专题专门详细介绍每一种。一、列表列表是python中的一种数据结构,它可以同时存储整数、浮点数、字符等东西!简单来说,你可以将它理解为:专业储存箱,主打一个来者不拒。1.列表长什么样用[]扩住各......
  • MySQL的where条件字符串区分大小写的问题
    https://blog.csdn.net/qq_45783259/article/details/132231226MySQL的where条件字符串区分大小写的问题在MySQL的默认情况下字符集采用的是utf8mb4,排序规则是utf8mb4_general_ci,这种情况下where条件遇到字符串是不区分大小写的。比如以下两条SQL语句查询出来的结果都是一样的,即......
  • leetcode-3211. 生成不含相邻零的二进制字符串
    leetcode-3211.生成不含相邻零的二进制字符串给你一个正整数n。如果一个二进制字符串x的所有长度为2的子字符串中包含至少一个"1",则称x是一个有效字符串。返回所有长度为n的有效字符串,可以以任意顺序排列。思路:所有长度为2的子字符串都包含1,也就是说,......
  • 字符串
    字符串1、反转字符串题目链接:力扣描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。示例输入:s=["h","e","l","l","o"]输出:["o","l","l......
  • Java学习第一天《String字符串的使用》
    1.获取字符最后一次出现的位置(函数返回值为int类型)                字符串的变量名.lastIndexOf(Stringstr);                               查找a最后出现的位置               System.out.print("请......