• 【教3妹学算法-每日3题(1)】重新格式化字符串


    3妹

    3妹:2哥,今天是7月1号了,转眼半年都已经过去了,好快啊。
    2哥:是啊, 时间过的太快了,感觉过年还是前不久的事情一样。
    3妹:下半年的OKR要开始制定了,下半年我一定要早睡早起, 减肥瘦10斤,要运动,按照吃饭,挣更多的钱……
    2哥:理想很丰满,现实很骨感啊, 愿望是都不错,做起来可都太难了。上半年定的目标都实现了吗?
    3妹:哎,是挺难的。
    2哥:要坚持啊, 来,从今天的3道题开始

    讲课

    题目:

    给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。

    请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。

    请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。

    示例 1:

    输入:s = “a0b1c2”
    输出:“0a1b2c”
    解释:“0a1b2c” 中任意两个相邻字符的类型都不同。 “a0b1c2”, “0a1b2c”, “0c2a1b” 也是满足题目要求的答案。
    示例 2:

    输入:s = “leetcode”
    输出:“”
    解释:“leetcode” 中只有字母,所以无法满足重新格式化的条件。
    示例 3:

    输入:s = “1229857369”
    输出:“”
    解释:“1229857369” 中只有数字,所以无法满足重新格式化的条件。
    示例 4:

    输入:s = “covid2019”
    输出:“c2o0v1i9d”
    示例 5:

    输入:s = “ab123”
    输出:“1a2b3”

    提示:

    1 <= s.length <= 500
    s 仅由小写英文字母和/或数字组成。

    #思路:
    两次遍历,第一次分别记录字符串中字母和数字的个数,如果差值绝对值大于1 ,则直接返回空。
    第二次遍历,把字母和数字交叉放在返回的结果中。

    java代码:

    class Solution {
    	public String reformat(String s) {
    		char[] cs = s.toCharArray();
    		int cnt1 = 0, cnt2 = 0;
    		for (int i = 0; i < cs.length; i++) {
    			char c = cs[i];
    			if (c >= '0' && c <= '9') {
    				cnt1++;
    			} else {
    				cnt2++;
    			}
    		}
    		if (Math.abs(cnt1 - cnt2) > 1) {
    			return "";
    		}
    		boolean num = false;
    		if (cnt1 > cnt2) {
    			num = true;
    		}
    		char[] ans = new char[cs.length];
    		int p1 = 0, p2 = 1;
    		for (int i = 0; i < cs.length; i++) {
    			char c = cs[i];
    			if (c >= '0' && c <= '9') {
    				if (num) {
    					ans[p1] = c;
    					p1 += 2;
    				} else {
    					ans[p2] = c;
    					p2 += 2;
    				}
    			} else {
    				if (!num) {
    					ans[p1] = c;
    					p1 += 2;
    				} else {
    					ans[p2] = c;
    					p2 += 2;
    				}
    			}
    		}
    		return new String(ans);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    MySQL事务 MVCC的实现原理
    Apache Tomcat漏洞复现
    VUE封装-自定义权限控制指令
    优化模型验证关键代码21:将VRP的三小标决策变量xijk转化为对应的路径序列及各节点的开始服务时间
    一文详解HFSS波端口和集总端口
    Linux内核设计与实现 第一章 Linux内核简介
    【MATLAB源码-第80期】基于蚯蚓优化算法(EOA)的无人机三维路径规划,输出做短路径图和适应度曲线
    第一章《嵌入式系统原理与实践》--沈建华 王慈 清华大学出版社 课后部分习题个人答案
    实现mnist手写数字识别
    C# 如何读取dxf档案
  • 原文地址:https://blog.csdn.net/kangbin825/article/details/125553765