求字符串第一个非重复字符+首尾相连数数字依次remove

原创 2018年02月13日 23:41:01

1.给定一个字符串,求第一个不重复的字符,如: abbcad -> c

我最开始想到的就是使用LinkedHashMap<Character,Integar>,一个保存了键值对放入顺序的HashMap。遍历字符串,当map中有该字符时其value加一,没有则放入(char,1)。而后遍历map的key集合,找出第一个值为1的即可。

    public  char a(String s){
		LinkedHashMap<Character, Integer> map=new LinkedHashMap<>();
		for(int i=0;i<s.length();i++){
			char c=s.charAt(i);
			if (map.get(c)!=null) {
				Integer in=map.get(c);
				map.put(c, ++in);
			} else {
				map.put(c, 1);
			}
		}
		Set<Character> result=map.keySet();
		Iterator<Character> iterator=result.iterator();
		char x=iterator.next();
		while (map.get(x)>1) {
			x=iterator.next();
		}
		return x;
	}

用两个数组来做也可以,不过效率应该是比不上HashMap的O(1)的查询。


2.标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号

思路是这样的,首先删除集合中所有报数为3的元素,然后对新的集合再进行相同操作,不过要用到上一轮的余数,想象把上一轮没数完的元素拼在开头然后计算集合中所有报数为3的元素并删除。这样循环直到只剩2个元素。

    public int b(int n){
		LinkedList<Integer> list=new LinkedList<>();
		for (int i = 1; i <=n; i++) {
			list.add(new Integer(i));
		}
		int last=0;//上一轮的余数
		while(list.size()>2){
			int removeNumber=(list.size()+last)/3;
			int nextlast=(list.size()-(3-last))%3;
			for(int i=removeNumber;i>0;i--){
				list.remove(i*3-1-last);
			}
			last=nextlast;
		}
		if (last==1) {
			return list.get(0);
		} else {
			return list.get(1);
		}
	}

版权声明:本文为博主原创文章,未经博主允许不得转载。

找一个字符串中第一个非重复的字符

java编写程序查找一个字符串中第一个非重复的字符
  • u014032223
  • u014032223
  • 2016年04月08日 16:02
  • 673

给定一个字符串,求第一个不重复的字符

如果有暴力解法,时间复杂度必然为O(n2)O(n^2),而要达到O(n2)O(n^2),关键就是,利用所有字符的ASCII码都是在0~255之间,声明一个标记数组存放字符串的信息。方法一:当字符串可以...
  • qq_25689397
  • qq_25689397
  • 2016年03月19日 23:24
  • 1303

java实现如何在字符串中找到第一个不重复的字符

/** * @author zhang yin ye * @date 2014 6 20 * @topic 如何在字符串中找到第一个不重复的字符 * 三种方法实现 */ p...
  • zhang434
  • zhang434
  • 2014年06月20日 22:16
  • 2982

在字符串中找出第一个不重复的字符

要求时间复杂度为O(n) 如:abcaddb; 找到的第一个不重复的字符为c,将输出c。 思路:将字符的ASC码值当作下标,先遍历一遍,找出ASC码值最大的字符,以他的ASC码值+1为创建字符数组...
  • lingfeng2019
  • lingfeng2019
  • 2017年04月07日 09:54
  • 373

leetcode-java.T003_LongestSubstringWithoutRepeatingCharacters 给定一个字符串,找字符中的最大非重复子串

每天坚持刷leetcode----给定一个字符串,找字符中的最大非重复子串 package leetcode.T003_LongestSubstringWithoutRepeatingCharact...
  • danielzhou888
  • danielzhou888
  • 2017年06月05日 02:00
  • 486

mysql找出第一个数字后,并加入分隔字符

SET @str = '霍元rea05531'; SELECT CONCAT( LEFT(@str, LEAST(IF(LOCATE(0,@str)=0,9999,LOCATE(0,@str)) ,...
  • c_enhui
  • c_enhui
  • 2016年12月07日 23:24
  • 388

对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符

题目描述 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长...
  • wickedvalley
  • wickedvalley
  • 2016年09月23日 10:43
  • 2713

经典算法——字符流中第一个不重复的字符

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一...
  • geekmanong
  • geekmanong
  • 2016年04月21日 15:26
  • 2591

n!最右非零数字

n!最右非零数字 + ##Description:####  给出正整数N(可能有前导0),请求出N!最右非零的数位的值 + ##Range:####  n...
  • Prime_min
  • Prime_min
  • 2015年03月16日 20:04
  • 626

经典考题——无重复字符问题(查找字符串中第一个无重复字符)

题目描述:寻求最佳的算法 编写一个高效率函数来找出一个字符串中第一个无重复字符.例如:”total”中的o,”teeter”中的r.要求算法效率优于O(n2)。分析:个人觉得,这个题目如果不强调效率就...
  • gengshenghong
  • gengshenghong
  • 2010年06月02日 21:12
  • 3469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:求字符串第一个非重复字符+首尾相连数数字依次remove
举报原因:
原因补充:

(最多只允许输入30个字)