题目链接
1903. 字符串中的最大奇数 - 力扣(LeetCode)https://leetcode-cn.com/problems/largest-odd-number-in-string/
题目描述
给你一个字符串 num ,表示一个大整数。请你在字符串 num 的所有 非空子字符串 中找出
值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 "" 。
子字符串 是字符串中的一个连续的字符序列。
示例
输入:num = "52" 输出:"5" 解释:非空子字符串仅有 "5"、"2" 和 "52" 。"5" 是其中唯一的奇数。输入:num = "4206" 输出:"" 解释:在 "4206" 中不存在奇数。输入:num = "35427" 输出:"35427" 解释:"35427" 本身就是一个奇数。
解题思路
贪心策略
情况分析:
- 全为偶数,即字符串中全为偶数,遍历完返回""即可。
- 4206 = "4206"
- 全为奇数,字符串中的每一个字符都是奇数,直接返回该字符串即可。
- 13579 = "13579"
- 奇偶混序,从后往前遍历,因为奇数只需保证最后一位为奇数,所以遇到奇数返回即可
- 35427 = "35427"
代码
class Solution {
public String largestOddNumber(String num) {
int len = num.length();
if(len == 1){
return (num.charAt(0)-'0')%2 == 0 ? "" : num;
}
int i = len - 1;
StringBuffer str = new StringBuffer();
while(i >= 0){
long cur1 = num.charAt(i) - '0';
if(cur1%2 == 1){
break;
}else{
i--;
}
}
str.append( num, 0, i + 1);
return str.toString();
}
}
补充
代码中涉及到的StringBuffer类有的小伙伴不明白的可以去看看下面这篇博客哦。
加油鸭,我是小鲨鱼,让我们一起进步。