面试题50:字符流中第一个只出现一次的字符
题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述
如果当前字符流没有存在出现一次的字符,返回#字符。
HashMap
import java.util.HashMap;
public class Solution {
StringBuffer sb=new StringBuffer();
//Insert one char from stringstream
public void Insert(char ch)
{
sb.append(ch);
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
HashMap<Character,Integer> map=new HashMap();
for(int i=0;i<sb.length();i++)
{
if(map.containsKey(sb.charAt(i)))
{
map.put(sb.charAt(i),map.get(sb.charAt(i))+1);
}
else
{
map.put(sb.charAt(i),1);
}
}
char c='#';
for(int i=0;i<sb.length();i++)
{
if(map.get(sb.charAt(i))==1)
{
c=sb.charAt(i);
break;
}
}
return c;
}
}数组实现简易版HashMap
import java.util.HashMap;
public class Solution {
StringBuffer sb=new StringBuffer();
int[] a=new int[256];
//Insert one char from stringstream
public void Insert(char ch)
{
sb.append(ch);
a[ch]++;
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
char c='#';
for(int i=0;i<sb.length();i++)
{
if(a[sb.charAt(i)]==1)
{
c=sb.charAt(i);
break;
}
}
return c;
}
}测试用例
- 功能测试:输入一个字符,输入多个字符,输入的所有字符都是唯一的,输入的所有字符都是重复出现的;
- 特殊输入测试:输入0个字符。
面试题52 两个量表的第一个公共结点
题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
用栈的思想 空间换时间
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.Stack;
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead2==null||pHead1==null)
return null;
Stack<ListNode> s1=new Stack<>();
Stack<ListNode> s2=new Stack<>();
while(pHead1!=null)
{
s1.add(pHead1);
pHead1=pHead1.next;
}
while(pHead2!=null)
{
s2.add(pHead2);
pHead2=pHead2.next;
}
ListNode l=null;
while(!s1.isEmpty()&&!s2.isEmpty()&&s1.peek()==s2.peek())
{
l=s1.pop();
s2.pop();
}
return l;
}
}优化方法
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead2==null||pHead1==null)
return null;
ListNode p1=pHead1;
ListNode p2=pHead2;
while(p2!=p1)
{
p2=p2.next;
p1=p1.next;
if(p1!=p2)
{
if(p1==null)
p1=pHead2;
if(p2==null)
p2=pHead1;
}
}
return p2;
}
}

京公网安备 11010502036488号