[力扣] 算法 14 (C#)

14. 最长公共前缀

public class Solution {
    public string LongestCommonPrefix(string[] strs)
    {
        if (strs.Length == 0) return string.Empty;
        var ret = strs[0].AsSpan();
        foreach(var str in strs.AsSpan(1))
        {
            ret = LCP(ret, str);
            if (ret.Length == 0) break;
        }
        return ret.ToString();
    }
    
    static ReadOnlySpan<char> LCP(ReadOnlySpan<char> left, ReadOnlySpan<char> right)
    {
        if (left.Length > right.Length) return LCP(right, left);
        var to = 0;
        while(to < left.Length)
        {
            if (left[to] != right[to]) break;
            to++;
        }
        return left.Slice(0,to);
    }
}

[蓝桥杯] 试题 算法训练 Anagrams问题

// http://lx.lanqiao.cn/problem.page?gpid=T223

Scanner in = new Scanner(System.in);

String a = in.nextLine().toLowerCase();
String b = in.nextLine().toLowerCase();
int[] alp = new int[26];

for (char ch : a.toCharArray())
    alp[ch - 'a']++;
for (char ch : b.toCharArray())
    alp[ch - 'a']--;

boolean ret = true;
for (int i : alp) {
    if (i != 0) {
        ret = false;
        break;
    }
}

System.out.println(ret ? "Y" : "N");

[蓝桥杯] 算法训练 审美课

// http://lx.lanqiao.cn/problem.page?gpid=T519
Scanner in = new Scanner(System.in);
int n = in.nextInt();// 学生数
int m = in.nextInt();// 图画数
int pattern = (1 << m) - 1;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(n);
for (int i = 0; i < n; i++) {
    int num = 0;
    for (int j = 0; j < m; j++) {
        num <<= 1;
        if (in.nextInt() == 1) {
            num |= 1;
        }
    }
    map.merge(num, 1, Integer::sum);
}
int ret = 0;
for (Entry<Integer, Integer> e : map.entrySet()) {
    ret += e.getValue() * map.getOrDefault(~e.getKey() & pattern, 0);
}
System.out.println(ret / 2);