记录自己无比蠢的一个下午

一、题目:316. 去除重复字母

给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。

哦豁,我写了一下午一直觉得别人的是错的,最后发现是我自己搞错了,我误解了字典序的含义?!!

“字典序”!!!划重点!

字符串之间比较跟数字之间比较是不太一样的。字符串比较是从头往后一个字符一个字符比较的。哪个字符串大取决于两个字符串中 第一个对应不相等的字符 。根据这个规则,任意一个以 a 开头的字符串都大于任意一个以 b 开头的字符串。

我的理解就是把最小的字符尽可能的放在前面 ,"cbacdcbc"就变成"acdb","bcabc"变成“abc”。

import java.util.Scanner;
import java.util.Stack;

public class Test2 {
	public static String del_double(String s) {
		Stack<Character>stack = new Stack<Character>();
		for(int i=0;i<s.length();i++) {
			Character c = s.charAt(i);
			if(stack.contains(c)) {
				continue;//结束本次循环,但没使本次循环停止
			}
			//当栈顶元素字符当前字符且后面还有该栈顶元素时,就将其出栈
			while(!stack.isEmpty() && stack.peek() > c && s.indexOf(stack.peek(),i)!=-1 ) {
					stack.pop();
				}
			
			stack.push(c);
		}
		char[] b = new char[stack.size()];
		for(int j=0;j<stack.size();j++) {
			b[j] = stack.get(j);
		}
		return new String(b);//将字符数组转换成字符串
	}
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String s = in.next();
		in.close();
		System.out.println(del_double(s));
	}

}

charAt(int index):返回指定索引处的字符;
public int indexOf(int ch, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,
如果此字符串中没有这样的字符,则返回 -1;
栈方法:pop():访问栈顶元素,并将其永久删除;\push()\peek():返回栈顶元素\get()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值