Java 返回字符串中第一个不重复字符的下标 下标从0开始
比如abcdefgabdef
其中字符c和g不重复,返回c的小标,下标从0开始,那么是2
package com.example.demo; import org.testng.annotations.Test; import java.util.ArrayList;
import java.util.LinkedHashSet; public class Test111 { String str1 = "abcdefgabdef"; @Test
public void fun1(){
//LinkedHashSet 有序的set集合
LinkedHashSet<Character> once = new LinkedHashSet<>();
LinkedHashSet<Character> chongFu = new LinkedHashSet<>();
ArrayList<Character> list = new ArrayList<>(); for (int i = 0; i < str1.length(); i++) {
boolean add = once.add(str1.charAt(i)); // 得到集合里所有出现过一次的元素 if (!add) {
chongFu.add(str1.charAt(i));// 得到集合里重复出现的元素
}
} boolean removeAll = once.removeAll(chongFu); // once里将存储所有不重复的元素
list.addAll(once);
System.out.println("所有不重复的字母:" + list);
for (int i = 0; i < str1.length(); i++) {
if (list.get(0) == str1.charAt(i)) {
System.out.println("它的索引为:" + i);
}
}
} @Test
public void fun2(){
ArrayList<Character> list = new ArrayList<>();
for (int i = 0; i < str1.length(); i++) {
int flag = -1;// 定义一个标志
for (int j = 0; j < str1.length(); j++) {
if (i == j) {// 如果是同一个元素跳过本次循环,继续下次循环
continue;
}
// 如果这个元素不是第一次出现,将标志改变
if (str1.charAt(i) == str1.charAt(j)) {
flag = 1;
}
}
// 未改变标志的元素,即只出现一次的元素
if (flag == -1) {
list.add(str1.charAt(i));
} // if } // for
System.out.println("所有不重复的字母:" + list);
System.out.println("第一个不重复的字母为:" + list.get(0));
for (int i = 0; i < str1.length(); i++) {
if (list.get(0) == str1.charAt(i)) {
System.out.println("它的索引为:" + i);
}
}
} @Test
public void fun3(){
for (int i = 0; i < str1.length(); i++) {
char charAt = str1.charAt(i);
// 找出取出的元素第一次出现的位置
int indexOf = str1.indexOf(charAt);
// 找出取出的元素最后一次出现的位置
int lastIndexOf = str1.lastIndexOf(charAt);
// 如果是唯一的元素,第一次出现的位置和最后一次出现的位置应该相同
// 如果相同了就没必要在继续走for循环了
if (indexOf == lastIndexOf) {
System.out.println(str1.charAt(indexOf));
System.out.println(indexOf);
return;
}
}
}
}
BF算法
BF算法,即Brute Force 算法的简称。用于检测某个字符串是否是另一个字符串的子串。
子串的概念#
假设字符串 X = 'girlfriend' , Y = 'friend' ,那么Y 就是 X的子串。同样的,end是friend的子串。
BF算法的思路#
BF算法的思路非常简单粗暴,就是从前到后一点点的匹配。例如: 子串 x= abcd | 主串为 y = abdabceabcde
如果 x[0] = y[0] 继续比较 x[1] y[1] 继续下去,如果一直到 x[3]= y[3]时 则 x 整个串都匹配上了。
如果 x[0] = y[0] 继续比较 x[1] y[i] 发现不等,那么就开始用 x[0] 比较 y[1] 然后继续 x[1] y[2]。
public class TestBF {
public static void main(String[] args) {
System.out.println(isSubstring("abdabceabcde","abcd")); // true
System.out.println(isSubstring("abdabceabcde","ff")); // false
}
private static boolean isSubstring(String main,String sub){
if(main == null || sub == null) {
return false;
}
if(main.length() < sub.length()) { // 子串不可比主串长
return false;
}
if(main.equals(sub)) { // 主串,子串 相等的情况
return true;
}
int len = main.length() - sub.length();
for (int i = 0; i < len; i++) {
boolean match = true;
for (int j = 0; j < sub.length(); j++) {
if(main.charAt(i+j) != sub.charAt(j)) {
match = false;
break;
}
}
if(match) {
return true;
}
}
return false;
}
}
Java 返回字符串中第一个不重复字符的下标 下标从0开始的更多相关文章
- 找出字符串中第一个不重复的字符(JavaScript实现)
如题~ 此算法仅供参考,小菜基本不懂高深的算法,只能用最朴实的思想去表达. //找出字符串中第一个不重复的字符 // firstUniqueChar("vdctdvc"); --& ...
- Java求字符串中出现次数最多的字符
Java求字符串中出现次数最多的字符 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51933611 Java ...
- 使用 Java 查找字符串中出现次数最多的字符以及出现的次数?
使用 Java 查找字符串中出现次数最多的字符以及出现的次数? import java.util.HashMap; import java.util.Map; public class TestStr ...
- java截取字符串中的最后几个字符
Java中的String类提供了一个substring(int from, int to)方法用于截取字符串中位置为from到to-1位置的字符. 因为字符串的字符位置是从0开始的,而substrin ...
- leetCode 题解之字符串中第一个不重复出现的字符
1.题目描述 Given a string, find the first non-repeating character in it and return it's index. If it doe ...
- java一个字符串中出现次数最多的字符以及次数
学习了别人的方法,觉得挺巧妙的.就是每次取出字符串的第一个字符,将字符串中与第一个字符相同的字符全部删除掉,然后通过计算删除前后字符串的长度来确定该字符在字符串中出现的次数,最终比较出出现最多次的字符 ...
- 三种java 去掉字符串中的重复字符函数
三种java 去掉字符串中的重复字符函数 public static void main(string[] args) { system.out.println(removerepeatedchar( ...
- 剑指Offer-字符流中第一个不重复的字符
package String; import java.util.LinkedHashMap; import java.util.Map; /** * 字符流中第一个不重复的字符 * 题目描述 * 请 ...
- H面试程序(12): 输出字符串中第一个只出现一次的字母
题目描述: 若字符串str为'' sbdddsbfc'',则输出 f; 若字符串str为''aabbccdd'',则输出:字符串str中的字符都出现两次以上 #include <stdio.h& ...
随机推荐
- 工控随笔_24_西门子TIA 博图硬件目录的更新
西门子博图软件,不但体积庞大,功能也很复杂,与经典的Step7相比,如果不是经常使用,一般都会有一种很难使用的感觉. 而且相比原来的Step7操作有点不太一样.这里简单的说一下硬件目录的更新. 有两种 ...
- Appium之Toast元素识别
问题思考 在日常使用App过程中,经常会看到App界面有一些弹窗提示(如下图所示)这些提示元素出现后等待3秒左右就会自动消失,那么我们该如何获取这些元素文字内容呢? Toast简介 Android中的 ...
- LODOP表格水平居中3(宽度为百分比)
如果一个表格在css样式等中设置了固定的宽度,想要实现表格在纸张中水平居中,可根据固定的宽度设置合适的左边距,如果打印项内容在打印项宽度中居中,可以设置打印项在纸张中居中.方法1:宽度固定,纸张大小固 ...
- U盘安装Windows Server2008 R2
安装Windows 2008 r2 提示windows 无法安装到这个磁盘.选中的磁盘采用GPT分区形式 利用U盘装系统的步骤 第一 进入BIOS,找SECURITY—SECURE BOOT中的SEC ...
- [UE4] TSharedPtr, TWeakObjectPtr and TUniquePtr
转自:https://dawnarc.com/2018/07/ue4-tsharedptr-tweakobjectptr-and-tuniqueptr/ UE4 的 TSharedPtr.TWeakO ...
- [ARM-Linux开发]Linux下加载.ko驱动模块的两种方法:insmod与modprobe
假设要加载的驱动程序模块名为SHT21.ko 加载驱动模块 方法一: 进入SHT21.ko驱动模块文件所在的目录,然后直接 insmod SHT21.ko 即可 方法二: 将SHT21.ko文 ...
- Mac多SSH Key配置
多SSH key配置 工作的时候碰到SSH配置的问题,就是公司用的是gittea的仓库,而本人的github平常也要使用,这个时候就需要配置不同的SSH key了.将同一个公钥分配配置给github和 ...
- turtle1
#画风车 from turtle import * pensize(2) for i in range(4): seth(360-i*90) fd(150) rt(90) circle(-150,45 ...
- [转帖]关于4A(统一安全管理平台)系统的理解
雪山上的蒲公英 https://www.cnblogs.com/zjfjava/p/10674577.html 关于4A(统一安全管理平台)系统的理解 1. 4A系统的需求分析 近年来企业用户的业 ...
- AX 2012 Computed column IIF语句使用
涉及Dynamics ax 行业已经好几年了,准备总结一些有用的处理方法供大家来参考 首先先介绍下Computed column技术,该技术是微软在AX2012版本中提供的新技术,可以让SQL语句在A ...