Leetcode每日随机2021/4/12

在这里插入图片描述

其实我觉得我这代码效率应该是可以的,只遍历了一遍p;
但是跑出来结果并不好看,很奇怪;
思路就是两个指针start和end,end-start+1就是当前字符串的长度,每次只保存最长的字符串也就是个数。
最后把以每个字母开头的最长有效字符串的长度加起来就是结果。
个人还是比较满意今天的代码的。

代码

class Solution {
    public int findSubstringInWraproundString(String p) {
		Map<Character, Integer> count = new HashMap<Character, Integer>();
		int start = 0, end = 0;
		while (end < p.length()) {
			while (end < p.length() - 1 && valid(p.charAt(end), p.charAt(end + 1))) {
				end++;
			}
			while (start <= end) {
				char l = p.charAt(start);
				if (count.getOrDefault(l, 0) < end - start + 1) {
					count.put(l, end - start + 1);
				}
				start++;
			}
			end++;
		}
		int res = 0;
		for (Character c : count.keySet()) {
			res += count.get(c);
		}
		return res;
	}

	private boolean valid(char a, char b) {
		if (a == b - 1 || (a == 'z' && b == 'a')) {
			return true;
		}
		return false;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值