0
点赞
收藏
分享

微信扫一扫

本周力扣算法

看山远兮 2022-04-30 阅读 80

文章目录

3. 无重复字符的最长子串

题解

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main1 {

	public static int lengthOfLongestSubstring(String s) {
		int n = s.length();
		int ans = 0, left = 0, right = 0;// left为左指针,right为右指针,两个指针指向输入的字符串
		Set<Character> set = new HashSet<Character>();
		while (left < n && right < n) {
			if (!set.contains(s.charAt(right))) {// set集合中不含右指针指向的字符时
				set.add(s.charAt(right));// 就将右指针指向的字符加入set集合
				right++;// 右指针向右移动一位
				ans = Math.max(ans, right - left);
			} else {
				set.remove(s.charAt(left));// 将左指针指向的字符在set集合中删除
				left++;
			}
			System.out.println(set);
		}
		return ans;
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		lengthOfLongestSubstring(s);
	}
}

在这里插入图片描述
可以通过输出语句更加具体的理解set集合和双指针带来的变化,帮助理解.

罗马数字转整数

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main2 {
	static Map<Character, Integer> map = new HashMap<Character, Integer>() {// 将罗马数字与阿拉伯数字进行键值对应
		{
			put('I', 1);
			put('V', 5);
			put('X', 10);
			put('L', 50);
			put('C', 100);
			put('D', 500);
			put('M', 1000);
		}
	};

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		romanToInt(str);
	}

	public static int romanToInt(String s) {
		int number = 0;
		for (int i = 0; i < s.length(); i++) {
			int value = map.get(s.charAt(i));
			if (i < s.length() - 1 && value < map.get(s.charAt(i + 1))) { //当第i个罗马字符对应的数字小于i+1对应的数时,应该减去i对应的数字
				number -= value;//以"IV"为例,I<V,则number先等于-1,再加上V,即number最终等于4
			} else {
				number += value;
			}
		}
		System.out.println(number);//该输出语句可作为测试
		return number;
	}
}

请添加图片描述
热爱可抵岁月漫长!
虽然我不会自己写,但我会理解答案(嘿嘿)

举报

相关推荐

0 条评论