文章目录
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;
}
}
热爱可抵岁月漫长!
虽然我不会自己写,但我会理解答案(嘿嘿)