字符串和路线图
1.比较字符串
比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母
在 A 中出现的 B 字符串里的字符不需要连续或者有序
public class a1{
public boolean compareStrings(String A, String B) { //counts首先记录A中所有的字符以及它们的个数,然后遍历B,如果出现counts[i]小于0的情况,说明B中该字符出现的次数大于在A中出现的次数
int[] counts = new int[26];
for (int i = 0; i < 26; i++) {
counts[i] = 0;
}
for (int i = 0; i < A.length(); i++) {
counts[A.charAt(i) - 'A'] ++;
}
for (int i = 0; i < B.length(); i++) {
counts[B.charAt(i) - 'A'] --;
if (counts[B.charAt(i) - 'A'] < 0) {
return false;
}
}
return true;
}
}
- 两个点之间的路线
给出一张有向图,设计一个算法判断两个点 s 与 t 之间是否存在路线
class DirectedGraphNode {
int label;
ArrayList<DirectedGraphNode> neighbors;
DirectedGraphNode(int x) { label = x; neighbors = new ArrayList<DirectedGraphNode>(); }
};
public class a3 {
public boolean hasRoute(ArrayList<DirectedGraphNode> graph,
DirectedGraphNode s, DirectedGraphNode t) {
if (s == t)
return true;
HashSet<DirectedGraphNode> visited = new HashSet<DirectedGraphNode>();
Queue<DirectedGraphNode> queue = new LinkedList<DirectedGraphNode>();
queue.offer(s);
visited.add(s);
while (!queue.isEmpty()) {
DirectedGraphNode node = queue.poll();
for (int i = 0; i < node.neighbors.size(); i++) {
if (visited.contains(node.neighbors.get(i))) {
continue;
}
visited.add(node.neighbors.get(i));
queue.offer(node.neighbors.get(i));
if (node.neighbors.get(i) == t) {
return true;
}
}
}
return false;
}
}